Jak mogę zboczyć do klasy E lub przynajmniej zrobić to w bezpieczny sposób bez ostrzeżeń?

Mam super-abstrakcyjną klasę Węzeł i 50 typów podklas SubNode.

Mam ogólną klasę <E extends Node>, która ma prywatną listę var <E> i metodę, która niestety musi zaakceptować superklasę Node ALWAYS, nie może przenieść jej do tylko E:

 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; 
 }

Każde rozwiązanie (Reflection?) Może skompilować bez ostrzeżeń, rzucając CastException zamiast dodawać żadnych obiektów z powodu kasowania typu? ...

Nie chcę pisać tej samej funkcji dla żadnego typu podklasy:

 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....
 }

Byłoby miło mieć taką metodę.

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

lub

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

questionAnswers(4)

yourAnswerToTheQuestion