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()不是隐式静态的,因此它可以访问它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |