¿Cómo puedo bajar a clase 'tipo E o al menos hacerlo de forma segura y sin advertencias?

Tengo clase súper abstracta Nodo y 50 tipos de subclases Subnodo.

Tengo una clase genérica <Nodo extendido E> que tiene una lista var privada <E> y un método que desafortunadamente tiene que aceptar el nodo superclase SIEMPRE, no puedo moverlo a solo 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; 
 }

Cualquier solución (¿Reflexión?) Capaz de compilar sin advertencias, lanzando una CastException en lugar de agregar cualquier objeto debido al borrado de tipo? ...

No quiero tener que escribir la misma función para cualquier tipo de subclase:

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

Sería tan bueno tener un método como.

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

o

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta