Java:访问枚举(enum)中的常量

标签 java enums constants

阅读SCJP书,我在第1章“自测”中发现了类似的内容:

enum Animals {
    DOG("woof"), CAT("meow"), FISH("burble");
    String sound;
    Animals(String s) { sound = s; }
}

class TestEnum {      
    static Animals a; 
    public static void main(String[] args) {                                                                                     
        System.out.println(a.DOG.sound + " " + a.FISH.sound);   

        // the following line is from me
        System.out.println(Animals.DOG.sound + " " + Animals.FISH.sound);
    }
} 

注意:代码编译正常。 我不明白的是为什么我们可以从变量 a 访问 DOG、CAT 或 FISH 常量。我认为(这也写在书中)作为常量的 DOG、FISH、CAT 的实现方式类似于 public static final Animals DOG = new Animals(1); 因此,如果它们真的是静态的,为什么我们可以从 a 访问它们? 最后一行是我熟悉的方式。

最佳答案

虽然这行得通,但不要那样做。将枚举与 Animal.DOGAnimal.CAT 等一起使用

上面所做的是声明一个枚举类型的对象,并在其上引用静态DOG。编译器知道 a 的类型,并且知道您需要 Animal.DOG。但这会降低可读性。

我相信这样做的目的是缩短枚举的使用。 a.DOG 而不是 Animal.DOG。如果你真的想缩短它,你可以使用 import static fqn.of.Animal 然后简单地使用 DOG

关于Java:访问枚举(enum)中的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206603/

相关文章:

java - 使用字符串值作为变量名

mysql - 将 1 作为数字保存到 ENUM ('1' ,'0' ) 字段设置值为 0

c++ - 枚举数组作为参数 c++

ios - bool 值、常量和@IBAction 选择器的 Swift 命名约定?

java - Spring Security 自定义过滤器豁免

java - Android或iPhone开发有必要学习J2ME吗?

java - JPA @ManyToOne - 我不想级联删除

ios - 使用枚举来执行函数?

constants - 如何将 Pascal Inno Setup ExpandConstant 与字符串变量一起使用?

php - 如何在本地 apache (php) 中设置 aws DB 常量?