Ho lezioni in programmazione avanzata presso la mia università e ho qualche problema a capire come funziona questo codice.Polimorfismo avanzato in Java
public final class GenericClass<T> {
private void overloadedMethod(Collection<?> o) {
System.out.println("Collection<?>");
}
private void overloadedMethod(List<Number> o) {
System.out.println("List<Number>");
}
private void overloadedMethod(ArrayList<Integer> o) {
System.out.println("ArrayList<Integer>");
}
public void method(List<T> l) {
overloadedMethod(l);
}
public static void main(String[] args) {
GenericClass<Integer> test = new GenericClass<Integer>();
test.method(new ArrayList<Integer>());
}
}
Perché questo codice stampa "Collection <? >"?
grazie, la vostra risposta spiega anche il motivo per cui dopo aver cambiato 'overloadedMethod (Lista o)' a 'overloadedMethod (Lista > o)' programma stampa 'Lista ' invece di 'Collection >' –
la la cosa più importante è la tua ultima frase. Questo spiega tutto! –
Risposta abbastanza buona, ma -1 per attirare la vostra attenzione sul fatto che la dichiarazione di 'GenericClass', invece, restituisce la stessa chiamata a 'overloadedMethod (Collection >)'. Quindi c'è qualcos'altro che succede qui. –