Standardmethode in der Schnittstelle in Java 8 und Bean Info Introspector
Ich habe ein kleines Problem mit Standardmethoden in Interface und BeanInfo Introspector. In diesem Beispiel gibt es Schnittstelle: Schnittstelle
public static interface Interface {
default public String getLetter() {
return "A";
}
}
und zwei Klassen ClassA und ClassB:
public static class ClassA implements Interface {
}
public static class ClassB implements Interface {
public String getLetter() {
return "B";
}
}
In der Hauptmethode druckt die App PropertyDescriptors aus BeanInfo:
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();
}
}
Und das Ergebnis ist:
class
class, letter
Warum ist die Standardmethode "letter" in ClassA nicht als Eigenschaft sichtbar? Ist es ein Fehler oder eine Funktion?