Mögliche Duplizieren:
Double brace initialisation (anonymous inner class) with diamond operatorWarum kann Diamond nicht auf anonyme innere Klassen schließen?
In Java 7 und höher können Diamanttypen verwendet werden auf normalerweise ohne ein Problem wie so zu folgern:
List<String> list = new ArrayList<>();
jedoch Es kann nicht für anonyme innere Klassen wie folgt sein:
List<String> st = new List<>() { //Doesn't compile
//Implementation here
}
Warum ist das? Logischerweise kann ich in diesem Szenario den Typ eindeutig als String
ableiten. Gibt es einen logischen Grund für diese Entscheidung, wenn der Typ nicht auf anonyme innere Klassen geschlossen werden kann oder aus anderen Gründen weggelassen wurde?
@Philipp Ich stimme nicht zu - diese Frage fragt, warum ein bestimmter Code nicht kompiliert (in der Tat ist die Antwort nur, dass Sie Diamant mit anonymen inneren Klassen nicht verwenden können), dieser fragt den technisch/logischen Grund für * warum * die Java-Entwickler entschieden haben, diese bestimmte Einschränkung an Ort und Stelle zu setzen. Verwandt, aber kaum das Gleiche. – berry120
Dies wurde in JDK 9 erheblich verbessert: https://bugs.openjdk.java.net/browse/JDK-8062373 –