我有一個擴展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'? –