我使用此代码查找给定类中的所有Java List:
BeanInfo beanInfo = Introspector.getBeanInfo(classx);
PropertyDescriptor[] propertyDescriptors = beanInfo .getPropertyDescriptors();
for (PropertyDescriptor pd : propertyDescriptors) {
Class<?> ptype = pd.getPropertyType();
if ((ptype+"").contains("java.util.List")) {
System.out.println("list class property: " + pd.getName() + ", type=" + ptype);
}
}
这是输出:
class property: value, type=interface java.util.List
问题是如何找出列表中的类型? 对于此示例,此列表在classx中定义为:
@JsonProperty("value")
private List<Value> value = new ArrayList<Value>();
我怎么知道列表是Value对象的列表? 感谢。
答案 0 :(得分:1)
由于Type Erasure,你无法通过Property introspection获得。类型Class
的任何内容都没有泛型类型参数信息(至少直接;超类型关系)。
要获得泛型类型声明,您需要能够访问java.lang.reflect.Type
(其中Class
是一个实现;但具有泛型参数的是GenericType
)。
有些库允许您完全解析泛型类型,例如java-classmate。它将允许您访问Field
和Method
的完全解析的类型信息,但从那时起,您将需要找出逻辑Bean属性。如果您愿意,可以将两者结合使用,以便您可以使用Bean Introspection查找Method
,然后将其与已解析的信息java-classmate
进行匹配。