标题只是举一个例子,真实需求是定义一个类
// 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 1
@ztcaoll222 哦,抱歉没看清楚。这个可以通过 TestD.class.getTypeParameters() 得到一个 TypeVariable 的数组,它的顺序和 getActualTypeArguments 一样,都和实际代码里定义的顺序一致的
调用 TypeVariable::getName 得到 "K" "V",map 一下就行了。 |
5
ztcaoll222 OP @CismonX #4 谢谢实测好用
|