【发布时间】:2014-06-17 21:38:43
【问题描述】:
请原谅初学者级别的问题,但我对枚举的隐含静态状态感到困惑。
一方面,您不能在方法中声明它们,因为它们是隐式静态的,并且您可以像任何其他静态类一样从静态上下文中引用它们。但另一方面,在内部,它们将自己称为“这”就好像它们是一个实例一样。
代码示例:
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。
我知道枚举是一种特殊类型的类,但我仍在尝试了解它们的一些非常规怪癖的原因。
当引用枚举常量时,是否存在某种工厂模式类型的自动构造?它究竟是在什么时候从静态类转变为实例的?
谢谢!
【问题讨论】:
-
您也可以在静态类中使用
this。 -
public String toString()是一个实例方法,因此this在其中始终有效。 -
“它究竟在什么时候从静态类转变为实例?”。这个问题是没有意义的。没有什么可以从静态转变为实例。您可以拥有一个静态类的实例,但那里没有任何过渡。
-
case SPRING: return "Allergy Season";太真实了。