Wie kann ich einen Downcast in die Klasse E durchführen oder es zumindest auf sichere Weise ohne Warnung schaffen?

Ich habe super abstrakte Klasse Node und 50 Arten von Unterklassen SubNode.

Ich habe eine generische Klasse <E extended Node>, die eine private var List <E> hat, und eine Methode, die leider IMMER Knoten der Oberklasse akzeptieren muss, kann sie nicht auf nur E verschieben:

 public void addSubElement (Node node){ 
        if (node instanceOf E) subElements.add((E)node); 
        else //Doing extra steps for occasional non-E nodes like discarding them silently without CastException; 
 }

Jede Lösung (Reflection?), Die in der Lage ist, ohne Warnungen zu kompilieren und eine CastException auszulösen, anstatt ein Objekt aufgrund der Typlöschung hinzuzufügen?

Ich möchte nicht die gleiche Funktion für irgendeine Art von Unterklasse schreiben müssen:

 public void addSubElement (Node node){                             
        if (node instanceOf SubNode1) subElements.add((SubNode1)node); 
        if (node instanceOf SubNode2) subElements.add((SubNode2)node); 
        //if (node instanceOf SubNode50....
 }

Es wäre so schön, eine Methode wie.

public void addSubElement (Node node){ 
        subElements.add((E)node.autoCastToSubClassOfAbstract("Node")); //Should throw CastException if non-E
 }

oder

 public void addSubElement (Node node){ 
        subElements.add(node.autoCastTo("E")); //Should throw CastException if non-E
 }

Antworten auf die Frage(4)

Ihre Antwort auf die Frage