超抽象クラス Node と 50 種類のサブクラス SubNode があります。
プライベート var List<E> を持つジェネリック Class <E extends Node> と、残念ながらスーパークラス Node を常に受け入れなければならないメソッドがあり、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;
}
タイプ消去のためにオブジェクトを追加する代わりに CastException をスローして、警告なしでコンパイルできるソリューション (Reflection?) はありますか??...
どのタイプのサブクラスに対しても同じ関数を作成する必要はありません。
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
}