如果枚举是隐式静态的,为什么他们能够在内部使用"this"关键字?

Mer*_*Mer 3 java enums static

请原谅初学者级别的问题,但我对枚举的隐式静态状态感到困惑.

一方面,你不能在方法中声明它们,因为它们是隐式静态的,你可以像任何其他静态类一样从静态上下文引用它们.但另一方面,在内部,它们将自己称为"this"as虽然他们是一个实例.

代码示例:

public class EnumTest {

  enum Seasons{
      SUMMER,
      FALL,
      WINTER,
      SPRING;

      public String toString()
      {
          switch(this)
          {
              case SUMMER:
                  return "Hot Summer";
              case FALL:
                  return "Colorful Fall";
              case WINTER:
                  return "Crisp Winter";
              case SPRING:
                  return "Allergy Season";
              default
                  return "wth?";

          }
      }
  }
public static void main(String[] args)
{
   System.out.println(EnumTest.Seasons.SUMMER.toString());
}

}
Run Code Online (Sandbox Code Playgroud)

注意如何在枚举定义中的toString()中,有一个关于"this"的开关.

在静态方法main中,以典型的静态类方式访问Enum.

我知道枚举是一种特殊的类型,但我仍然试图理解一些非常规怪癖的原因.

当引用枚举常量时,是否存在某种工厂模式类型的自动构造?它究竟在什么时候从静态类转变为实例?

谢谢!

rge*_*man 8

枚举类中定义的常量是隐含的唯一事物static.它接近(但不完全相同):

public static final Seasons SUMMER = new Seasons();
public static final Seasons FALL = new Seasons();
public static final Seasons WINTER = new Seasons();
public static final Seasons SPRING = new Seasons();
Run Code Online (Sandbox Code Playgroud)

这允许您编写诸如此类的代码Seasons.SUMMER.

类体的其余部分就像一个普通的类体 - public String toString()不是隐含的static,因此它可以访问this.