Javabean Introspector - 我的列表中有什么?

标签 java javabeans

我使用此代码来查找给定类中的所有 Java 列表:

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

问题是如何找出List中是什么类型? 对于此示例,该列表在 classx 中定义为:

@JsonProperty("value")
private List<Value> value = new ArrayList<Value>();

我如何知道该列表是 Value 对象的列表? 谢谢。

最佳答案

由于类型删除,您无法通过属性自省(introspection)获得该信息。任何 Class 类型的东西都没有泛型类型参数信息(至少是直接的;父类(super class)型关系有)。 要获得泛型类型声明,您需要能够访问 java.lang.reflect.Type (其中 Class 是一种实现;但具有泛型参数的实现是 >通用类型)。

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

关于Javabean Introspector - 我的列表中有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30947603/

相关文章:

Spring boot - @Component注解创建两个相同类型的bean

java - Android - 存储对象的最佳存储方法(数据库或json/内部存储)

java - 从java中的char数组和字节数组中提取特定字节

java - 在 Java 9 模块化项目上的 Eclipse 中进行 JUnit 测试

java - Android 声音不在启动画面中播放

java.io.StreamCorruptedException : invalid type code: 00

java - 按字段对 java bean 集合进行排序

java - 如何在spring框架中设计bean

java - 为什么没有将 javabean 功能内置到根 JAVA 对象中?

java - 您可以使用 JDBI、@BindBean、@SqlQuery 注释调用对象上的方法吗?