java.beans.Introspector getBeanInfo不会拾取任何超级接口';s属性

java.beans.Introspector getBeanInfo不会拾取任何超级接口';s属性,java,reflection,javabeans,Java,Reflection,Javabeans,我刚刚注意到java.beans.Introspector getBeanInfo没有获取任何superinterface的属性。例如: public interface Person { String getName(); } public interface Employee extends Person { int getSalary(); } 对员工的反省只会产生薪水,即使这个名字是从这个人身上继承下来的 为什么会这样?我宁愿不必使用反射来获取所有getter。尝试使用

我刚刚注意到java.beans.Introspector getBeanInfo没有获取任何superinterface的属性。例如:

public interface Person {
    String getName();
}
public interface Employee extends Person {
    int getSalary();
}
对员工的反省只会产生薪水,即使这个名字是从这个人身上继承下来的

为什么会这样?我宁愿不必使用反射来获取所有getter。

尝试使用反射

public static BeanInfo getBeanInfo(Class<?> beanClass, Introspector.USE_ALL_BEANINFO);
publicstaticbeaninfo getBeanInfo(类beanClass,Introspector.USE\u ALL\u BeanInfo);

看看这是否会产生您想要的结果。

在这种情况下,您应该编写一个自定义BeanInfo类。

Sun bug中介绍了这个问题

Java虚拟机不支持如前所述的开箱即用。我也需要这个,并作为的一部分实现了。

我试过了,但没有成功。我的解决方案是通过调用类的getInterfaces()和getSuperclass()来内省超类和父接口。是否只需要属性?您可以从BeanInfo获取属性描述符,我相信它包含所有属性,包括来自超类的属性。请注意,如果您定义了自定义BeanInfo,则需要定义getAdditionalBeanInfo()