Joh*_*oth 7 java enums qualified-name
最近,我注意到,有可能:
class Test {
public enum Season { WINTER, SPRING, SUMMER, FALL }
Season field = Season.WINTER.SPRING; // why is WINTER.SPRING possible?
}
Run Code Online (Sandbox Code Playgroud)
是否有一个原因?
ide*_*ide 10
当您使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
同样,由于枚举实际上是"静态的",Season.WINTER.SPRING相当于Season.SPRING; Season.WINTER被枚举类型替换Season.
作为旁注,不鼓励从实例访问静态成员,因为它可能非常混乱.例如,如果您看到包含的一段代码someThread.sleep(),您可能会被欺骗相信它会someThread被置于睡眠状态.但是,由于sleep()是静态的,该代码实际上正在调用Thread.sleep(),它会休眠当前线程.
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |