如果不能使用通配符,如何列出几种对象?
How do I make a list of several kind of object if I cannot use wildcards?
我想做一个可以装两种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
。
This question 表示:don't use a wildcard when you both get and put.
。
那么,如何在不使用通配符的情况下列出几种对象?
通配符不适用于此用例。你应该简单地做
List<Parent> list = new ArrayList<>();
并从 get
:
转换 return 值
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);
我想做一个可以装两种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
。
This question 表示: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);