Como posso fazer downcast para a classe 'type E ou pelo menos fazê-lo de forma segura sem avisos?

Eu tenho super nó de classe abstrata e 50 tipos de subclasses SubNode.

Eu tenho uma classe genérica <E extends Node> que tem um private var List <E> e um método que infelizmente tem que aceitar a superclasse Node ALWAYS, não pode movê-lo para apenas 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; 
 }

Qualquer solução (Reflection?) Capaz de compilar sem avisos, lançando um CastException em vez de adicionar qualquer objeto devido ao tipo de apagamento ?? ...

Eu não quero ter que escrever a mesma função para qualquer tipo de subclasse:

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

Seria tão bom ter um método como esse.

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

ou

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

questionAnswers(4)

yourAnswerToTheQuestion