Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Diamond funktioniert nicht mit anonymen inneren Klassen
Die Antwort findest du in der Doku zu Project Coin:
Internally, a Java compiler operates over a richer set of types than those that can be written down explicitly in a Java program. The compiler-internal types which cannot be written in a Java program are called non-denotable types. Non-denotable types can occur as the result of the inference used by diamond. Therefore, using diamond with anonymous inner classes is not supported since doing so in general would require extensions to the class file signature attribute to represent non-denotable types, a de facto JVM change. It is feasible that future platform versions could allow use of diamond when creating an anonymous inner class as long as the inferred type was denotable.
Also so, wie der Code da steht, dürften beide Methoden nicht kompilieren. Die erste Methode müsste so lauten:
Java:
//Kompilliert
private List<String> getList1() {
return new ArrayList<String>();
}
Und der zweite Code kompiliert nicht, weil Du in der Methodensignatur sagst, dass Du eine Liste zurück lieferts, in der Strings stehen. Aber in der Methode eben keine Liste von Strings erzeugst, sondern versuchst, eine Liste deiner anonymen Klasse zu erzeugen. Und die ist eben kein String. Um es zum kompilieren zu bringen, kannst Du folgendes machen:
Java:
//Kompilliert
private <T>List<T> getList2() {
return new ArrayList<T>(){};
}
Nur bringt Dir das nichts, weil Du von außen keine Instanzen Deiner anonymen Klassen erzeugen kannst.
Ah ok, hätte man sehen können. :idea: Aber der Einwand gilt auch hier:
new ArrayList<>() {};
ist eine Liste Deiner anonymen Klassen und eben nicht eine Liste von Strings.
Ah ok, hätte man sehen können. :idea: Aber der Einwand gilt auch hier:
new ArrayList<>() {};
ist eine Liste Deiner anonymen Klassen und eben nicht eine Liste von Strings.