Nein, Generika funktionieren nicht so. Was Sie tun können, ist Ihre Methode als MyMethod(List<? extends SuperClass> list)
zu definieren (per Konvention sollte sie myMethod(...)
btw heißen).
Das Problem mit List<SuperClass>
vs. List<SubClass>
ist, dass Sie solchen Listen neue Elemente hinzufügen können, während der Compiler es nicht erlaubt, etwas zu einem List<? extends SuperClass>
hinzuzufügen - und das hat einen Grund:
Betrachten Sie Folgendes:
%Vor% Wenn Sie jetzt ein List<A>
haben, können Sie Instanzen von A
, B
und C
hinzufügen. Übergeben Sie jedoch eine List<B>
an eine Methode als List<? extends A>
-Parameter, weiß der Compiler nicht, ob Instanzen von A
oder C
zu dieser Liste hinzugefügt werden können (dies wäre nicht zulässig) , aber für den Fall, dass du ein List<A>
übergeben würdest, wäre es). Daher beschränkt der Compiler Sie nicht.
Das Definieren eines Parameters als List<A>
teilt dem Compiler mit, dass es in Ordnung ist, Instanzen aller drei Klassen in diese Liste aufzunehmen. Wenn Sie jetzt einen List<B>
als solchen Parameter übergeben könnten, könnten Sie mit einem List<B>
enden, der Instanzen von A
und / oder C
enthält. Und das ist eindeutig nicht das, was Sie wollen, und könnte zu Laufzeitfehlern führen, die bereits zur Kompilierzeit verhindert werden sollten - durch die Verwendung von Generika. Deshalb funktioniert dein Ansatz nicht.
Tags und Links java generics list compiler-errors subclass