Generics / vermeiden von downcasts

Hallo,

Ich habe eine abstrakte Klasse AbsNode von der ElementNode, TextNode usw. (XML Typen) abgeleitet sind. Um Downcasts zu vermeiden wollte ich jetzt von AbsNode[] array... auf List<? extends AbsNode> refactoren,

Allerdings weis ich nicht wie man da Typen einfügt:

public void setNode(final int paramOffset, final AbsNode paramNode);

muss ich dann für jeden einzelnen Knoten ein spezielles setNode(...) einfügen? Und generell klappt das so ja noch nicht weil der Compiler dann bei list.add(int, AbsNode) meckert: "The method add(int, capture#10-of ? extends AbsNode) in the type List<capture#10-of ? extends AbsNode> is not applicable for the arguments (int, AbsNode)".

Viele Grüße,
Johannes
 
Achso, ich vermute die Liste muss dann aus genau dem gleichen subtype von AbsNode bestehen. Gibts irgendwie eine Möglichkeite eine Liste aus verschiedenen Subtypes zu erstellen? Klar mit List<AbsNode> kann ich alle AbsNodes reinschreiben aber dann muss ich letztendlich bei einem get wieder instanceof machen und downcasten...
 
Wenn man eine List<? extends AbstractThing> hat, kann man da keine der konkreten (abgeleiteten) Klassen einfügen.
Wenn man eine List<AbstractThing> hat, kann man keine der konkreten (abgeleiteten) rausholen (außer mit instanceof).

Das ist so. (Finde dich damit ab. Wenn der Programmiert mit der Sprache kämpft, gewinnt die Sprache 😉 )

Für jeden Typ eine eigene Liste, oder eine Klasse, die diese Funktion anbietet, könnten eine Abhilfe sein.

Manchmal werden auch solche Methoden gebaut, die einem eine Liste "filtern" und eine neue Liste mit den Elementen zurückgeben, die den gewünschten Typ haben. Aber das ist... naja... zumindest hinterfragenswert. Wenn man die Dinge unterschiedlich behandeln muss, darf man sie nicht alle in eine Liste packen...
 

Neue Themen


Zurück
Oben