Angenommen, ich habe dies:Casting auf generische Subtypen einer generischen Klasse
class Base<T> {}
class Derived<T> extends Base<T> {}
Dann in meinem Code, kann ich sicher ohne eine Warnung wie diese Stimmen:
public <T> void foo(Base<T> base) {
Derived<T> f = (Derived<T>) base; // fine, no warning
}
was in Ordnung ist. Wenn die abgeleitete Klasse jedoch mehr Typparameter hat, funktioniert sie nicht mehr:
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!
}
Warum ist das? Gibt es etwas Offensichtliches, dass ich hier vermisse?
Warum funktioniert es nicht? Es funktionierte für mich ... – m3th0dman
Was "nicht funktioniert" ist, dass ich eine ungeprüfte Warnung bekomme, obwohl diese Besetzung vollkommen sicher ist. –
Welcher Compiler? Ich sehe es mit dem Eclipse-Compiler. –