我想制作一个可以容纳两种Object
的List
。我想到的是使用通配符。以下是我的代码。
public class Parent {
//code
}
public class ChildOne extends Parent {
//code
}
public class ChildTwo extends Parent {
//code
}
public class Implementation {
List<? extends Parent> list;
public Implementation() {
list.add(new ChildOne());
list.add(new ChildTwo());
ChildOne co = list.get(0);
ChildTwo ct = list.get(1);
}
}
我不能使用<? extends Parent>
,因为我做add
。
但是,我也不能使用<? super Parent>
,因为我做get
。
这个问题说:don't use a wildcard when you both get and put.
。
那么,我该如何在不使用通配符的情况下列出几种对象的列表?
通配符不适合此用例。你应该只是做
List<Parent> list = new ArrayList<>();
并从 get
施放返回值:
ChildOne co = (ChildOne) list.get(0);
ChildTwo ct = (ChildTwo) list.get(1);
您可以以这种方式创建您的列表:
List<Parent> list = new ArrayList<>();
list.add(new ChildOne());
list.add(new ChildTwo());
现在您可以添加并获取任何对象(或扩展)Parent
。
请记住,您需要在获得适当的对象。
ChildOne co = (ChildOne) list.get(0);
ChildTwo ct = (ChildTwo) list.get(1);