java - 在这种情况下,`ParameterizedType#getActualTypeArguments` 返回一个包含多个元素的数组
问题描述
我试图在泛型中获取类类型,下面的代码有效:
@Test
public void test3() throws NoSuchFieldException {
Class<?> clazz = (Class<?>) ((ParameterizedType)Role.class.getDeclaredField("users")
.getGenericType()).getActualTypeArguments()[0];
assert clazz.equals(User.class) : "error!";
}
static class Role {
public List<User> users;
}
static class User {
}
所以,我学到了一些关于ParameterizedType
.
我想知道在哪种情况下ParameterizedType#getActualTypeArguments
返回一个包含多个元素的数组。我尝试了很多情况,但所有结果都是一个大小为 1 的数组。
有任何想法吗?
解决方案
如果您有多个通用参数(如 Map 中),它会返回一个包含多个元素的数组。
例子 :
@Test
public void exampleTest() {
Map<Integer, String> myMap = new HashMap<>();
ParameterizedType type = (ParameterizedType) myMap.getClass().getGenericSuperclass();
System.out.println("Array of actual types : " + Arrays.toString(type.getActualTypeArguments()));
}
输出是:
实际类型数组:[K, V]
推荐阅读
- r - 从当地时间到国际时间?
- docker-compose - Docker 数据库迁移/部署到 DigitalOcean
- vb.net - 如何检测 webbrowser-control 中的错误
- html - 如何使用 CSS 将单行文本向上移动 10 像素或 15 像素?
- c - 如何防止这种无限循环
- python - 如何使用 python pandas 计算嵌套组比例而不丢失原始行数
- google-apps-script - Google Scripts - 从 google 表格中的单个单元格将多个客人添加到日历活动
- javascript - React:从受控子输入字段更新大型父记录时如何保持性能?
- c# - 与 EF Core 的单向一对一关系
- android - 带有 RecyclerView 的自定义对话框在屏幕上膨胀得非常小