flo*_*ian 10 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);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:代码编译正常.我不明白为什么我们可以从变量访问DOG,CAT或FISH常量a.我想(并且也写在书中)DOG,FISH,CAT作为常量以类似于public static final Animals DOG = new Animals(1);
So 的方式实现,如果它们真的是静态的,为什么我们可以从中访问它们a?最后一行是我熟悉的方式.
虽然这有效,但不要这样做.使用带有枚举Animal.DOG,Animal.CAT等等.
上面做的是声明枚举类型的对象,并DOG在其上引用静态.编译器知道你的类型a,并知道你想要的Animal.DOG.但这会杀死可读性.
我相信这样做的目的是缩短枚举的用法.a.DOG而不是Animal.DOG.如果你真的想缩短它,你可以使用import static fqn.of.Animal然后简单地使用DOG.
写作 a.DOG与写作是一样的Animal.DOG。也就是说,编译器会将变量替换为其编译时类型 Animal。它被认为是糟糕的代码,因为它隐藏了这样一个事实:它依赖于编译时类型而不是a.