Eventuali duplicati:
Double brace initialisation (anonymous inner class) with diamond operatorPerché non è possibile inferire tipi di diamante su classi interne anonime?
In Java 7 e versioni successive, il diamante può essere utilizzato per inferire i tipi avanti normalmente in questo modo, senza un problema:
List<String> list = new ArrayList<>();
Tuttavia, non può per classi interne anonime come questa:
List<String> st = new List<>() { //Doesn't compile
//Implementation here
}
Perché è questo? Logicamente in questo scenario, posso sicuramente dedurre il tipo come String
. C'è una ragione logica per questa decisione in cui il tipo non può in realtà essere dedotto su classi interne anonime, o è stato omesso per altri motivi?
@Philipp Non sono d'accordo - quella domanda è chiedere perché un certo pezzo di codice non viene compilato (anzi la risposta è solo che non è possibile utilizzare il diamante con classi interne anonime), questo sta chiedendo il motivo tecnico/logico per * perché * gli sviluppatori Java hanno scelto di mettere in atto quella particolare restrizione. Correlati, ma difficilmente la stessa cosa. – berry120
Questo è stato notevolmente migliorato in JDK 9: https://bugs.openjdk.java.net/browse/JDK-8062373 –