一个列表,多种类型

时间:2016-12-13 17:52:26

标签: java

我有两个清单:

    List<Person> listOfPerson = new ArrayList<>();
    List<Animal> listOfAnimal = new ArrayList<>();

我想做这样的事情:

    if(...) list = listOfPerson;
    else list = listOfAnimal;

这样我就可以使用List执行许多操作:

    list.get(i).getId();
    list.size();
    … 

如何使它成为可能?

2 个答案:

答案 0 :(得分:0)

有几种方法可以达到你想要的效果。 使用标记接口实现或使用泛型

使用标记接口实现
EG:

public interface MarkerInterface {

}

public class Person implements MarkerInterface {

}

public class Animal implements MarkerInterface {

}

现在你可以拥有一个带有Marker界面的列表,它可以容纳两个对象

List< MarkerInterface > livingThings;

这可以包含两个值。

或者您可以将其声明为对象,如

List< Object > livingThings;

这也可以包含两个值。

答案 1 :(得分:0)

诀窍在于如何声明可能包含的公共列表。你必须将其声明为

List<? extends CommonBaseClass> list;

例如:

private static void listManipulation(boolean someBool) {
    List<String> stringList = Arrays.asList("one", "two", "three");
    List<Integer> integerList = Arrays.asList(1, 2, 3);

    // Object is the only common base class of String and Integer 
    List<? extends Object> objectList = someBool ? stringList : integerList;
    System.out.println(objectList.size());
    System.out.println(objectList.get(0).toString());

    // This correctly produces an error.  
    // objectList.add("This won't work!");
}