我有两个清单:
List<Person> listOfPerson = new ArrayList<>();
List<Animal> listOfAnimal = new ArrayList<>();
我想做这样的事情:
if(...) list = listOfPerson;
else list = listOfAnimal;
这样我就可以使用List执行许多操作:
list.get(i).getId();
list.size();
…
如何使它成为可能?
答案 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!");
}