小编典典
基本上,您需要做的是获取所有java.lang.reflect.Field班级
所有
对象字段,包括公共,受保护,打包和私有访问字段,只需使用Class.getDeclaredFields()。像这样:
for (Field field : Person.class.getDeclaredFields()) {
System.out.format("Type: %s%n", field.getType());
System.out.format("GenericType: %s%n", field.getGenericType());
}
编辑:
正如哇哇在评论中指出的那样,您实际上需要调用Field#getGenericType(),检查返回的Type是否为a
ParameterizedType,然后相应地获取参数。使用ParameterizedType#getRawType()和ParameterizedType#getActualTypeArgument()分别获取a的原始类型和类型参数的数组ParameterizedType。以下代码演示了这一点:
for (Field field : Person.class.getDeclaredFields()) {
System.out.print("Field: " + field.getName() + " - ");
Type type = field.getGenericType();
if (type instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType)type;
System.out.print("Raw type: " + pType.getRawType() + " - ");
System.out.println("Type args: " + pType.getActualTypeArguments()[0]);
} else {
System.out.println("Type: " + field.getType());
}
}
并输出:
Field: name - Type: class java.lang.String
Field: children - Raw type: interface java.util.List - Type args: class foo.Person
2020-09-09