【问题标题】:Java array with enums带有枚举的 Java 数组
【发布时间】:2016-01-24 00:48:36
【问题描述】:

我用 Java 中的枚举和数组做了一些实验:

enum animals
  {CAT, DOG, COW, BIRD, POTATO}

要将其放入数组中,我只需这样做...

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

但现在,如果我必须定义更大的条目,我认为如果我可以像在 C++ 中那样输入枚举without animals.XXX 会很有用

animals[] creatures = {CAT, POTATO, BIRD, CAT, CAT, POTATO, COW...}
  • 这需要时间并让我更好地了解情况
  • Java 已经知道我的目标类型是“动物”,所以在我看来这是不必要的 (?)

所以我只是想知道这是否有可能,如果没有,为什么?

【问题讨论】:

  • 另请注意,您在上面写的内容与枚举的 switch 语法之间存在明显差异:此类 switch 语句中的 cases 不能case animals.CAT:等等,但它们 必须case CAT:,这与它们在数组初始值设定项中的使用不同。因此,您可以通过询问来扩大您的问题,如果我可以(实际上必须)在case 语句中省略限定符,为什么我不能在数组初始值设定项中做同样的事情? (当然反之亦然。)

标签: java arrays enums


【解决方案1】:

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.*;

避免需要导入每个动物,但请注意第一个构造 is generally considered better than the second one

【讨论】:

  • 谢谢!没想到这一点,但它似乎很合理,像一个魅力
【解决方案2】:

虽然还有其他可行的解决方案,但您不必真正经历这些。您可以改为使用 values() 数组来拉入附加到该数组的所有当前值。

也就是说,如果你真的想要一个名为 creatures 的数组,其中包含你的枚举的所有条目,你可以这样表达:

// Classes, interfaces, and enums should start with an upper case
Animals[] creatures = Animals.values();

如果您向枚举添加一个新条目,它将自动通过values() 拉入。

【讨论】:

    【解决方案3】:

    首先,enum 应命名为 Animals,因为类型应以大写字母开头。

    您必须限定数组初始值设定项中的值的原因是因为初始值设定项的每个值都是一个成熟的表达式。

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

    enum 值唯一不需要限定的地方是在 switch 语句中,因为 case 的值必须是常量,而不是表达式:

    switch (animal) {
        case CAT:
            // code
            break;
        case DOG:
            // code
            break;
    }
    

    除此之外,您必须符合条件,除非您使用 import static 导入枚举值。

    【讨论】:

      【解决方案4】:

      下面应该这样做

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

      【讨论】:

        猜你喜欢
        • 2011-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多