Scusami per il titolo di domanda così generico, ma non ero sicuro di come chiamare correttamente la mia domanda.Generici Java con caratteri jolly e wrapper statici
vedere i tipi predefiniti di risultato di Collections.singleton
chiamate:
Set<Number> numberSingleton =
Collections.singleton((Number) null);
Set<Collection> rawCollectionSingleton =
Collections.singleton((Collection) null);
Set<Collection<String>> stringCollectionSingleton =
Collections.singleton((Collection<String>) null);
Set<? extends Collection<?>> anyCollectionSingleton =
Collections.singleton((Collection<?>) null);
Quello che non riesco a spiegare è l'ultima riga. Perché viene utilizzato ? extends Collection<?>
invece del semplice Collection<?>
?
È una correzione corretta per questo?
Set<Collection<?>> anyCollectionSingleton =
Collections.<Collection<?>>singleton((Collection<?>) null);
perché ho iniziato tutto questo:
ho avuto un problema con la linea non la compilazione:
java.util.Optional.ofNullable((Collection<?>) a).orElse((Collection<?>) b);
Questo sembra risolvere il problema, ma qual è il prezzo?
java.util.Optional.<Collection<?>>ofNullable((Collection<?>) a).orElse((Collection<?>) b);
La tua domanda riguarda perché l'IDE genera questo tipo strano? Perché Set> singleton = Collections.singleton ((Collezione >) null); funziona bene –
AdamSkywalker
Oracle JDK 1.8.0_40 mi dà errore di compilazione 'java: tipi incompatibili: java.util.Set> non può essere convertito in java.util.Set > '. Quale versione di Java usi? –
Gedrox
ultimo, 1.8.0_66 – AdamSkywalker