Prima di Java 7 la sintassi di seguito è stato utilizzato per creare un ArrayList,Utilizzando operatore diamante in Java 7
ArrayList<Integer> ints = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7));
Ma dal momento che Java 7 possiamo omettere il tipo generico nel cioè costruttore,
ArrayList<Integer> ints = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
ma quando ho provato a fare qualcosa di simile,
ArrayList<Number> nums = new ArrayList<>(Arrays.asList(1,2,3,4,4,5.5,6.6,7.7));
ottengo un errore, ma quando ho citato il tipo generico sul lato destro vale a dire,
ArrayList<Number> nums = new ArrayList<Number>(Arrays.asList(1,2,3,4,5.5,6.6,7.7));
Il codice funziona perfettamente. Quale potrebbe essere la ragione di questo?
Grazie in anticipo.
Non riesco a richiamare specifici passaggi dal JLS che sono cambiati tra Java 7 e 8 per supportare questo, quindi questo è un commento, ma se la memoria serve Java 8 espanso i tipi di inferenza che potrebbero essere eseguiti, credo permettendo di cercare anche i supertipi e/o tenendo conto del contesto aggiuntivo. Il tuo terzo snippet di codice viene compilato senza lamentarsi in Java 8. – awksp