/ / Intenzione o scopo principale della notazione jolly '? estende T '- java, generici

Intenzione principale o Scopo della notazione con caratteri jolly '? estende T '- java, generici

Ho questo po 'di osservazioni (contro-intuitive) sulla notazione jolly generica utilizzata nelle raccolte. Il scopo della notazione jolly List<? extends T> è consentire il assegnazione di un elenco (di sottotipi di T) al riferimento diElenco di "? Of T". Il suo scopo non è quello di consentire specificamente l'aggiunta di elementi di sottotipi di T nell'elenco (di "? Di T"), che è possibile anche in un List<T>.

    List<Number> list = new ArrayList<Integer>(); // invalid , List<Integer> is not assignable to List<Number>

List<Number> list = new ArrayList<Number>() ; // OK

list.add(new Integer(1)); // valid , "? extends Number" not needed!

List<? extends Number> list1 = new ArrayList<Integer>();  // Valid , because of notation "? extends Number"

La mia osservazione è corretta?

risposte:

8 per risposta № 1

Sì, la tua osservazione è corretta. Tuttavia, nel caso che mostri, non è molto utile (stai scegliendo di ignorare informazioni utili sull'elenco). L'assegnazione è più utile quando è implicita quando si chiama una funzione di libreria.

Ad esempio, supponiamo che tu abbia una funzione di libreria che chiude una raccolta di InputStreams. Potresti accettare a List<InputStream>, ma ciò è inutilmente restrittivo. Potresti invece fare questo:

public void closeAll(Collection<? extends InputStream> streams) {
for ( InputStream stream : streams ) {
stream.close();
}
}

Ora puoi passare a List<FileInputStream> anziché.


1 per risposta № 2

Extends è per la lettura da un elenco e Super è per la scrittura in un elenco. Leggi la pagina 7 di questo tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

Leggi queste note di lezione della classe MIT nella costruzione di software: http://stellar.mit.edu/S/course/6/sp11/6.005/courseMaterial/topics/topic2/lectureNotes/Generics-spring11/Generics-spring11.pdf

speriamo che questi chiariscano tutto con caratteri jolly e generici.