我有超抽象类 Node 和 50 种类型的子类 SubNode。
我有一个通用类 <E extends Node> 它有一个私有 var List<E> 和一个不幸的是必须接受超类 Node ALWAYS 的方法,不能将它移动到 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 而不是由于类型擦除而添加任何对象??...
我不想为任何类型的子类编写相同的函数:
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
}