2

我想将特定元素添加到 ArrayList。我可以通过这样做来实现这一点:

List<Employee> list = new ArrayList<Employee>();
List<String> list = new ArrayList<String>();

但是,我想创建一个包含 Employee 或 String 对象的新 List ,仅此而已:

// This is
List<String or Employee> list = new ArrayList<String or Employee>();

这可能吗?如果是,请向我解释。

4

3 回答 3

5

String只有当和Employee扩展相同类型时,您才能这样做。例如,假设StringEmployeeextends Type,那么您可以执行以下操作:

List<? extends Type> list = new ArrayList<? extends Type>()

但是...我将假设String您指的是java.lang.String-如果是这种情况(可能是这样),那么如果没有以下内容就无法做到这一点,我认为这对您来说太笼统了具体用例:

List<? extends Object> list = new ArrayList<? extends Object>()

Employee您可以尝试创建一个包含 an和 a的容器对象,String然后创建该类型的列表,但这最终可能与维护两个并行列表一样痛苦。

于 2013-04-24T23:11:50.413 回答
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);
        }

    }
于 2013-04-24T23:26:59.223 回答
0

这是不可能的。可以这样做:

List<? extends Object> list = new ArrayList<? extends Object>()

它将容纳一种类型的任何东西。或者

List<Object> list = new ArrayList<Object>()

它将容纳一切。你已经编写了自己的代码。

于 2013-04-24T23:34:44.683 回答