gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:59 26 4
gpt4 key购买 nike

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

一方面,您不能在方法中声明它们,因为它们是隐式静态的,并且您可以像任何其他静态类一样从静态上下文中引用它们。但另一方面,在内部,它们将自己称为“this”就好像它们是一个实例。

代码示例:

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 以典型的静态类方式访问。

我知道枚举是一种特殊类型的类,但我仍在努力理解它们的一些非常规怪癖的原因。

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

谢谢!

最佳答案

枚举类中定义的常量是唯一隐式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();

这允许您编写代码,例如 Seasons.SUMMER

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

关于java - 如果枚举是隐式静态的,为什么它们能够在内部使用 "this"关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24273746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com