Javabean Introspector - 我的清单中有什么?

时间:2015-06-19 21:34:12

标签: java javabeans

我使用此代码查找给定类中的所有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对象的列表? 感谢。

1 个答案:

答案 0 :(得分:1)

由于Type Erasure,你无法通过Property introspection获得。类型Class的任何内容都没有泛型类型参数信息(至少直接;超类型关系)。 要获得泛型类型声明,您需要能够访问java.lang.reflect.Type(其中Class是一个实现;但具有泛型参数的是GenericType)。

有些库允许您完全解析泛型类型,例如java-classmate。它将允许您访问FieldMethod的完全解析的类型信息,但从那时起,您将需要找出逻辑Bean属性。如果您愿意,可以将两者结合使用,以便您可以使用Bean Introspection查找Method,然后将其与已解析的信息java-classmate进行匹配。