带有枚举的Java数组
我在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
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};