最近,我注意到,有可能:
class Test {
public enum Season { WINTER, SPRING, SUMMER, FALL }
Season field = Season.WINTER.SPRING; // why is WINTER.SPRING possible?
}
这有什么原因吗?
最佳答案
当您在 Java 中访问对象的静态成员(包括枚举)时,编译器会有效地用其静态类型替换该对象。更具体地说,
class ExampleClass {
static int staticField;
static void staticMethod() {
ExampleClass example = new ExampleClass();
example.staticField; // Equivalent to ExampleClass.staticField;
example.staticMethod(); // Equivalent to ExampleClass.staticMethod();
}
}
同样,由于枚举实际上是“静态的”,Season.WINTER.SPRING
等同于 Season.SPRING
; Season.WINTER
替换为其枚举类型 Season
。
作为旁注,不鼓励从实例访问静态成员,因为这可能会造成混淆。例如,如果您看到一段包含 someThread.sleep()
的代码,您可能会误以为 someThread
已进入休眠状态。然而,由于 sleep()
是静态的,该代码实际上是在调用 Thread.sleep()
使当前线程 hibernate 。
关于java - 在 Java 中,为什么可以用另一个枚举常量来限定一个枚举常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742178/