加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如果枚举是隐式静态的,为什么它们能够在内部使用“this

发布时间:2020-12-15 04:43:27 所属栏目:Java 来源:网络整理
导读:请原谅初学者级别的问题,但我对枚举的隐式静态状态感到困惑. 一方面,你不能在方法中声明它们,因为它们是隐式静态的,你可以像任何其他静态类一样从静态上下文引用它们.但另一方面,在内部,它们将自己称为“this”as虽然他们是一个实例. 代码示例: public clas
请原谅初学者级别的问题,但我对枚举的隐式静态状态感到困惑.

一方面,你不能在方法中声明它们,因为它们是隐式静态的,你可以像任何其他静态类一样从静态上下文引用它们.但另一方面,在内部,它们将自己称为“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());
}

}

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

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

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

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

谢谢!

解决方法

枚举类中定义的常量是唯一隐式静态的东西.它接近(但不完全相同):

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();

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

类体的其余部分就像一个普通的类体 – public String toString()不是隐式静态的,因此它可以访问它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读