请原谅初学者级别的问题,但我对枚举的隐式静态状态感到困惑.
一方面,你不能在方法中声明它们,因为它们是隐式静态的,你可以像任何其他静态类一样从静态上下文引用它们.但另一方面,在内部,它们将自己称为"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.
我知道枚举是一种特殊的类型,但我仍然试图理解一些非常规怪癖的原因.
当引用枚举常量时,是否存在某种工厂模式类型的自动构造?它究竟在什么时候从静态类转变为实例?
谢谢!
枚举类中定义的常量是隐含的唯一事物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.
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |