Java list/array of animals 包含各种动物

Java list/array of animals containing a variety of animals

我需要一份所有动物的清单。我有一个基本的 Animal class 并想将其扩展到狗、猫、鬣蜥等

有没有什么好的方法可以把它们合二为一List

我希望能够检查所有动物的完整列表,而不必更改所有以前制作的动物。他们应该知道所有其他 Animal class 在他们之后制作的作品。

您可以通过扩展 Animal 基础 class 来制作任意数量的 Animal,如下所示:

public class Dog extends Animal {

}

然后您可以声明一个新的动物列表。

List<Animal> animals = new ArrayList<Animal>();

完成后,您可以添加任意数量的新对象以扩展 Animal class 到您的列表。

animals.add(new Dog());
animals.add(new Cat());
animals.add(new Iguana());

您可以这样创建 List<Animal>

// create empty list
List<Animal> animals = new ArrayList<>();

// add any kind of animal
animals.add(new Kangaroo());
animals.add(new Butterfly());

// use that list later
int numberOfAnimals = animals.size();
for (Animal animal : animals) {
    // do something
}

注意事项:

  • 当使用动物列表中的项目时,您不再知道它是哪种动物。如果您想访问动物的袋鼠特定详细信息,您应该检查该物品是否 袋鼠(使用 instanceof
  • 您只能将对象添加到动物列表中,其 class extends Animal.
  • 一般来说,最好让您的代码尽可能通用。如果您需要 ArrayList 的特殊功能,请将您的动物设为 ArrayList。但在大多数情况下,将变量定义为 List 甚至 Collection(或 Iterable)会使您的代码更加灵活。

叫做Polymorphism。所以基本上,你自己回答了你的问题。在 Java 中添加到声明集合类型的子类型的集合对象是完全合法的。

您可以使用 List<? extends Animal> animals = new ArrayList<>(); 然后将任何类型的动物添加到列表中。