想象一下以下场景:
class MyClass extends OtherClass<String>{
String myName;
//Whatever
}
class OtherClass<T> {
T myfield;
}
我正在专门使用反射来分析 MyClass(MyClass.class).getDeclaredFields()
,在这种情况下,我将获得以下字段(和类型,使用字段的 getType() ):
myName --> String
myField --> T
我想获取 T 的实际类型,由于扩展符号中的显式“字符串”,该类型在运行时已知,如何获取 myField 的非遗传类型?
编辑解决:
似乎答案是“你不能”。对于那些稍后可能会看到这个问题的人,我建议使用 Jackson(我试图这样做来生成 JSON)并以这样的方式注释您的类和字段,以便 Jackson 知道继承层次结构并可以自动执行操作下面建议的正确答案。
这只能通过反射来实现,因为您明确使用了String
,否则此信息将因类型擦除而丢失。
ParameterizedType t = (ParameterizedType) MyClass.class.getGenericSuperclass(); // OtherClass<String>
Class<?> clazz = (Class<?>) t.getActualTypeArguments()[0]; // Class<String>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)