Nel mio ultimo question (grazie a tutti che mi rispondono), ho appreso la differenza tra List<Object>
e List<?>
.Java: caratteri jolly nuovamente
Tuttavia non riesco ancora a vedere l'utilità dei caratteri jolly.
Ho due ArrayList
s:
ArrayList<Integer> li = new ArrayList<Integer>(Arrays.asList(1,2,3));
ArrayList<String> ls = new ArrayList<String>(Arrays.asList("one","two","three"));
Ora, guardate i due blocchi di codice qui sotto:
static void printList(ArrayList<?> list)
{
for (Object elem: list)
System.out.print(elem + " ");
System.out.println();
}
e
static <T> void printList(ArrayList<T> list)
{
for (T elem: list)
System.out.print(elem + " ");
System.out.println();
}
Quando chiamo:
printList(li);
printList(ls);
Entrambi i metodi restituiscono l'output:
1 2 3
one two three
Tuttavia la seconda soluzione, nel ciclo for, invece di Object
s che utilizzo tipi parametrizzati (molto più elegante credo).
Quindi, la domanda principale rimane: Perché abbiamo bisogno di caratteri jolly?
jolly sono state fatte proprio alla fine del lavoro di generici. Per citare Josh Bloch parlando di chiusure. "Semplicemente non possiamo permetterci altri caratteri jolly". Penso che non pensi molto neanche a loro. Ive usa solo? quando sono limitati. ad es. estende MyObj> – RNJ