Załóżmy, że mam to:Casting do generycznych podtypów rodzajowego klasy
class Base<T> {}
class Derived<T> extends Base<T> {}
Wtedy w moim kodu, mogę bezpiecznie rzucać bez ostrzeżenia tak:
public <T> void foo(Base<T> base) {
Derived<T> f = (Derived<T>) base; // fine, no warning
}
co jest w porządku. Ale jeśli klasa pochodna ma więcej parametrów typu, to już nie działa:
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!
}
Dlaczego tak jest? Czy jest tu coś oczywistego, czego tu brakuje?
Dlaczego to nie działa? To zadziałało dla mnie ... – m3th0dman
To, co "nie działa", polega na tym, że dostaję niezaznaczone ostrzeżenie, chociaż ta obsada jest całkowicie bezpieczna. –
Jaki kompilator? Widzę to z kompilatorem Eclipse. –