所以我遇到了一些非常有用的东西.在一个方法中,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();
}
Run Code Online (Sandbox Code Playgroud)
我添加了私有变量,因此您可以看到它与标准private构造函数的关系.
所以这让我想知道:RAWR实际上,与Test班级相关的是什么?通常,这种语法会让我觉得我正在定义一个匿名的内部类,但这里看起来并不直观,因为RAWR它不是匿名的.
我能想到的最接近的事情是,a的值enum实际上是对enum自身的扩展,例如,
public class RAWR extends Test {
@Override
public int doStuff() {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
那么,有谁知道这是怎么回事?
枚举声明指定一个新的枚举类型,一种特殊的类类型.
[...]
枚举常量的可选类体隐式定义了一个匿名类声明(第15.9.5节),该声明扩展了直接封闭的枚举类型.
对于
c在声明体中声明的每个枚举常量E,E都有一个隐式声明public static final field的类型E与其具有相同的名称c.该字段有一个变量初始值设定项,由c与之相同的注释组成,并注释c.
enum您声明的类型是Test.你声明的每个枚举常量都是子类的实例Test,如果它有一个主体.
请注意,enum类型也是隐式的final(您无法将它们子类化).Java语言仅允许枚举常量的子类化行为.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |