Как я могу понизить класс E до класса или, по крайней мере, сделать это безопасным способом без предупреждений?

У меня есть супер абстрактный класс Node и 50 типов подклассов SubNode.

У меня есть общий класс & lt; E extends Node & gt; который имеет приватную переменную List & lt; E & gt; и метод, который, к сожалению, должен принимать узел суперкласса ВСЕГДА, не может переместить его просто в 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; 
 }

Любое решение (Reflection?), Способное компилироваться без предупреждений, выбрасывает CastException вместо добавления какого-либо объекта из-за стирания типа ?? ...

Я не хочу писать ту же функцию для любого типа подкласса:

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

Было бы так здорово иметь такой метод.

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

или же

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

Ответы на вопрос(4)

Ваш ответ на вопрос