标题只是举一个例子,真实需求是定义一个类
// K, V 顺序不同,我故意的 public class TestD<V, K> { private K key; private V value; }
在另一个地方定义
public class TestA { private TestD<String, Integer> testD ; }
已知可以通过
ParameterizedType type = (ParameterizedType) TestA.class.getDeclaredField("testD").getGenericType();
获得具体的类型的数组,但无法知道 K 对应的是什么类型,V 对应的是什么类型
所以怎么样获得它们的对应信息 ?
![]() | 1 CismonX 2020-02-20 17:11:25 +08:00 ParameterizedType::getActualTypeArguments 在某种程度上可以满足你的要求 但是由于 JVM 的类型擦除,类型参数必须在编译期确定,才能用这种方式获取到 |
2 ztcaoll222 OP @CismonX #1 审题啊,“获得具体的类型的数组” 就是指 getActualTypeArguments 这个函数 ![]() |
![]() | 4 CismonX 2020-02-20 18:13:53 +08:00 ![]() @ztcaoll222 哦,抱歉没看清楚。这个可以通过 TestD.class.getTypeParameters() 得到一个 TypeVariable 的数组,它的顺序和 getActualTypeArguments 一样,都和实际代码里定义的顺序一致的 调用 TypeVariable::getName 得到 "K" "V",map 一下就行了。 |
5 ztcaoll222 OP @CismonX #4 谢谢实测好用 ![]() |