我想向ArrayList添加特定元素。我可以这样做:
List<Employee> list = new ArrayList<Employee>();
List<String> list = new ArrayList<String>();
但是,我想创建一个新的List,它包含Employee或String对象,而不是其他内容:
// This is
List<String or Employee> list = new ArrayList<String or Employee>();
这可能吗?如果是,请解释我。
答案 0 :(得分:5)
如果String
和Employee
扩展相同类型,则只能执行此操作。例如,假设String
和Employee
延伸Type
,那么您可以执行以下操作:
List<? extends Type> list = new ArrayList<? extends Type>()
然而......我将假设String
,你指的是java.lang.String
- 如果是这种情况(它可能是),那么没有办法做到这一点类似下面的内容,我认为这对于您的特定用例来说过于笼统:
List<? extends Object> list = new ArrayList<? extends Object>()
您可以尝试创建一个包含Employee
和String
的容器对象,然后创建该类型的列表,但这可能最终会像维护两个并行列表一样痛苦。
答案 1 :(得分:1)
您可以通过将列表包装在可以指定可以添加的类型的自定义类中来实现此目的。例如:
public class EmployeeList {
private List<Object> backingList = new ArrayList<Object>();
public Object get(int i) {
return backingList.get(i);
}
public boolean add(String s) {
return backingList.add(s);
}
public boolean add(Employee e) {
return backingList.add(e);
}
}
答案 2 :(得分:0)
这是不可能的。人们可以这样做:
List<? extends Object> list = new ArrayList<? extends Object>()
将保留一种类型的任何东西。 OR
List<Object> list = new ArrayList<Object>()
将保留一切。你已经编写了自己做的代码。