gpt4 book ai didi

java - 枚举值实际上是枚举本身的子类吗?

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

所以我遇到了一些非常有用的有趣的东西。在 enum 中,您可以定义一个 abstract 方法,每个 enum 值都必须为其提供一个实现。例如,以下内容:

public enum Test {

RAWR ("Burninating the country side") {
@Override
public int doStuff() {
return 0;
}
};

private final String enumStuff;

private Test(String enumStuff) {
this.enumStuff = enumStuff;
}

public abstract int doStuff();

}

我添加了私有(private)变量,这样您就可以看到它是如何与标准的 private 构造函数相关的。

所以这让我想知道:相对于 Test 类,RAWR 实际上是什么?通常,这种语法会让我认为我正在定义一个匿名内部类,但在这里看起来并不直观,因为 RAWR 不是匿名的。

我能想到的最接近的事情是 enum 的值实际上是 enum 本身的扩展,例如,

public class RAWR extends Test {
@Override
public int doStuff() {
return 0;
}
}

那么,有人知道这真正是怎么回事吗?

最佳答案

From the JLS

An enum declaration specifies a new enum type, a special kind of class type.

[...]

The optional class body of an enum constant implicitly defines an anonymous class declaration (§15.9.5) that extends the immediately enclosing enum type.

JLS also states

For each enum constant c declared in the body of the declaration of E, E has an implicitly declared public static final field of type E that has the same name as c. The field has a variable initializer consisting of c, and is annotated by the same annotations as c.

您声明的enum 类型是Test。您声明的每个枚举常量都是 Test 子类的一个实例,如果它有主体的话。

请注意,enum 类型也是隐式的 final(您不能将它们子类化)。 Java 语言只允许枚举常量的这种子类化行为。

关于java - 枚举值实际上是枚举本身的子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24958470/

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