Java 如何声明泛型以便类及其子类匹配

Java 如何声明泛型以便类及其子类匹配,java,generics,Java,Generics,我有一个扩展节点的class元素。 我想宣布一份清单,其工作原理如下: List<Node> elementsList; for( Element e : (List<Element>) elementsList ) { } 我应该使用哪种泛型类型?将其声明为列表 如果Bar扩展了Foo,则无法安全地将列表强制转换为列表 或者不推荐!: 但在这种情况下,您最好根本不使用泛型。这将编译,但不安全: List<? extends Node> elementsLi

我有一个扩展节点的class元素。 我想宣布一份清单,其工作原理如下:

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