我想检测我班级中的字段,这些字段要么是自定义字段(如Address
或原生 java 字段)。
因此,我试图读取每个字段的包名称(稍后检查它们是否以java.*
.
public class ReflectionTest {
public class MyDTO {
private String name;
private Address address;
}
public class Address {
private String street;
private String zip;
private String town;
}
@Test
public void testPackageName() {
for (Field field : MyDTO.class.getDeclaredFields()) {
//always: java.lang.Class
System.out.println(field.getGenericType().getClass().getPackage().getName());
}
}
}
问题:显示的包总是java.lang
. 为什么?
你必须调用getType()
而不是getGenericType()
. 考虑这个例子:
public class Sandbox {
public int intField;
public Sandbox myField;
public static void main(String[] args) {
Arrays.stream(Sandbox.class.getDeclaredFields()).forEach(f ->
System.out.println(f.getName() + " : " + f.getType().getName()));
}
}
输出
intField : int
myField : my.answer.Sandbox
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句