带有枚举的Java数组

带有枚举的Java数组,java,arrays,enums,Java,Arrays,Enums,我在Java中尝试了一些枚举和数组: enum animals {CAT, DOG, COW, BIRD, POTATO} 要将其放入数组,我只需执行以下操作 animals[] creatures = {animals.CAT, animals.POTATO}; 但是现在如果我必须定义更大的条目,我想如果我可以在没有动物的情况下键入枚举,这会很有用,就像我在C中一样++ animals[] creatures = {CAT, POTATO, BIRD, CAT, CAT, POTATO

我在Java中尝试了一些枚举和数组:

enum animals
  {CAT, DOG, COW, BIRD, POTATO}
要将其放入数组,我只需执行以下操作

animals[] creatures = {animals.CAT, animals.POTATO};
但是现在如果我必须定义更大的条目,我想如果我可以在没有动物的情况下键入枚举,这会很有用,就像我在C中一样++

animals[] creatures = {CAT, POTATO, BIRD, CAT, CAT, POTATO, COW...}
  • 这需要时间,让我有一个更好的概述
  • Java已经知道我的目标类型是“动物”,所以我认为这是不必要的(?)

所以我只是想知道这在任何方面是否可能,为什么不可能?

Java要求您使用完全分类的名称来使用它。对于标准类,这通常是通过导入带有
import name.of.package
的包,然后使用类的简单名称来完成的。对于静态字段,如枚举常量,可以使用静态导入

import static animals.CAT;
import static animals.POTATO;
import static animals.BIRD;
import static animals.COW;

// ...

animals[] creatures = {CAT, POTATO, BIRD, CAT, CAT, POTATO, COW...};

你也可以使用

import static animals.*;

避免导入每个动物,但请注意第一个构造。

首先,应将
枚举
命名为
动物
,因为类型应以大写字母开头

必须限定数组初始值设定项中的值的原因是,初始值设定项的每个值都是一个完整的表达式

int x = <expression>;
int[] x = {<expression>, <expression>, ...};
Animals x = <expression>;
Animals[] x = {<expression>, <expression>, ...};

除此之外,您还必须进行资格验证,除非您使用
导入静态

导入枚举值,尽管还有其他解决方案可以使用,但您不必真正执行这些操作。您可以改为使用
values()
数组来提取附加到该数组的所有当前值

也就是说,如果您确实想要一个名为
bioters
的数组,其中包含枚举的所有条目,您可以将其表示为:

// Classes, interfaces, and enums should start with an upper case
Animals[] creatures = Animals.values();
如果向枚举添加新条目,它将通过下面的
values()自动拉入

animals[] creatures = {animal.CAT, animal.POTATO, animal.BIRD, CAT};

还请注意,您上面所写的内容与枚举的
开关
语法之间存在明显差异:此类开关语句中的
案例
不能是
案例动物。CAT:
等,但它们必须是
案例CAT:
,而不是在数组初始值设定项中使用。因此,您可以通过以下问题来补充您的问题:如果我可以(实际上必须)在
case
语句中省略限定符,为什么我不能在数组初始值设定项中也这样做?(当然,反之亦然)谢谢!没有想到这一点,但它似乎非常合理,并像一个魅力工程
animals[] creatures = {animal.CAT, animal.POTATO, animal.BIRD, CAT};