Java 如何声明泛型以便类及其子类匹配
我有一个扩展节点的class元素。 我想宣布一份清单,其工作原理如下:Java 如何声明泛型以便类及其子类匹配,java,generics,Java,Generics,我有一个扩展节点的class元素。 我想宣布一份清单,其工作原理如下: List<Node> elementsList; for( Element e : (List<Element>) elementsList ) { } 我应该使用哪种泛型类型?将其声明为列表 如果Bar扩展了Foo,则无法安全地将列表强制转换为列表 或者不推荐!: 但在这种情况下,您最好根本不使用泛型。这将编译,但不安全: List<? extends Node> elementsLi
List<Node> elementsList;
for( Element e : (List<Element>) elementsList ) {
}
我应该使用哪种泛型类型?将其声明为列表
如果Bar扩展了Foo,则无法安全地将列表强制转换为列表
或者不推荐!:
但在这种情况下,您最好根本不使用泛型。这将编译,但不安全:
List<? extends Node> elementsList;
所以基本上忽略了泛型。首先想到的是,当您收到父类列表时,为什么要尝试使用子类?不能确定您是否总是会收到子类实例列表。 您可以遍历父级列表并使用instanceof进行检查
我不明白。您想要一个节点列表,但想要像所有元素一样在其上迭代?为什么不创建一个列表呢?我不能,它必须是List@firen:为什么?你不能两全其美@如果它真的必须是列表,那么你为什么问这个问题?@Matt:我认为安全这个词是多余的;编译器根本不允许它。。。
List<? extends Node> elementsList;
for (Node n : elementsList) {
Element e = (Element) n;
}
public void testMethod(List<? extends Node> list){
for(Node node: list){
if(node instanceof Element){
//bla bla bla
}
}
}