阅读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.DOG
、Animal.CAT
等一起使用
上面所做的是声明一个枚举类型的对象,并在其上引用静态DOG
。编译器知道 a
的类型,并且知道您需要 Animal.DOG
。但这会降低可读性。
我相信这样做的目的是缩短枚举的使用。 a.DOG
而不是 Animal.DOG
。如果你真的想缩短它,你可以使用 import static fqn.of.Animal
然后简单地使用 DOG
。
关于Java:访问枚举(enum)中的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206603/