Java 8 和 Bean 信息自省函数中接口中的默认方法
2022-09-02 14:00:49
我对界面和BeanInfo Introspector中的默认方法有一点问题。在此示例中,有接口:接口
public static interface Interface {
default public String getLetter() {
return "A";
}
}
以及两个类 A 类和 B 类:
public static class ClassA implements Interface {
}
public static class ClassB implements Interface {
public String getLetter() {
return "B";
}
}
在 main 方法应用中,从 BeanInfo 打印 PropertyDescriptors:
public static String formatData(PropertyDescriptor[] pds) {
return Arrays.asList(pds).stream()
.map((pd) -> pd.getName()).collect(Collectors.joining(", "));
}
public static void main(String[] args) {
try {
System.out.println(
formatData(Introspector.getBeanInfo(ClassA.class)
.getPropertyDescriptors()));
System.out.println(
formatData(Introspector.getBeanInfo(ClassB.class)
.getPropertyDescriptors()));
} catch (IntrospectionException e) {
e.printStackTrace();
}
}
结果是:
class
class, letter
为什么默认方法“letter”在 ClassA 中不可见为属性?是错误还是功能?