首页 > 解决方案 > 在这种情况下,`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 的数组。

有任何想法吗?

标签: java

解决方案


如果您有多个通用参数(如 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]


推荐阅读