我有一个扩展Node的Element类。 我想申报表<>这应该工作一样:如何声明泛型以便类和它的子类匹配
List<Node> elementsList;
for(Element e : (List<Element>) elementsList) {
}
我应该使用什么样的泛型类型的?
我有一个扩展Node的Element类。 我想申报表<>这应该工作一样:如何声明泛型以便类和它的子类匹配
List<Node> elementsList;
for(Element e : (List<Element>) elementsList) {
}
我应该使用什么样的泛型类型的?
声明它为List<Element>
。
如果Bar extends Foo
,则无法安全地将List<Foo>
投射到List<Bar>
。
或者(不推荐!):
List<Node> elementsList;
for (Node n : elementsList)
{
Element e = (Element) n;
// ...
}
,但在这样的速度,你还不如不使用泛型的。
这将编译,但并不安全:
for (Node n : elementsList) {
Element e = (Element) n;
}
所以基本上忽略了仿制药:
List<? extends Node> elementsList;
如果它必须是节点剩下的唯一选择。
首先想到的是,当你收到父母名单时,为什么要使用子类?不能确定你总是会收到一个子类实例列表。 您可以通过父母对列表进行迭代,并与instanceof
public void testMethod(List<? extends Node> list){
for(Node node: list){
if(node instanceof Element){
//bla bla bla
}
}
}
我不明白检查。你想要一个'Node'列表,但是想迭代它,就好像它们都是'Element's?为什么不创建一个'List'? –