Supponiamo che io sono questo:Casting per sottotipi generiche di una classe generica
class Base<T> {}
class Derived<T> extends Base<T> {}
Poi, nel mio codice, posso tranquillamente gettato senza un avvertimento come questo:
public <T> void foo(Base<T> base) {
Derived<T> f = (Derived<T>) base; // fine, no warning
}
che va bene. Ma se la classe derivata ha più parametri di tipo, non funziona più:
class Base<T> {}
class Derived<T, U> extends Base<T> {}
public <T> void foo(Base<T> base) {
Derived<T, ?> f = (Derived<T, ?>) base; // unchecked warning!
}
Perché è così? C'è qualcosa di ovvio che mi manca qui?
Perché non funziona? Ha funzionato per me ... – m3th0dman
Quello che "non funziona" è che ottengo un avviso non controllato anche se questo cast è perfettamente sicuro. –
Che compilatore? Lo sto vedendo con il compilatore Eclipse. –