这样做的原因是什么?例如,我可能希望有一个内部枚举,它将被用作封闭类的属性,然后根据该属性值返回实现相同接口的封闭类的两个不同属性之一,如此处
class Moo{
enum Blah {
Hey{
Awwable awwableMe() {
return Moo.this.oe1;}
}, Ho{
Awwable awwableMe() {
return Moo.this.oe2;}
};
abstract Awwable awwableMe();
}
private Awwable oe1;
private Awwable oe2;
private Blah smth;
void Awwable theSomeMethod() {
return smth.awwableMe(); //or any other code that uses smth.awwableMe();
}
}
但是我无法编写这样的代码,因为我无法引用Moo.this.oe1
或oe2
,因为它们处于非静态上下文中,而且我在其中。
答案 0 :(得分:2)
如果你创建一个实例级(非静态)内部枚举类是没有任何意义的 - 如果枚举的实例与外部类绑定,它们将破坏枚举保证
来自docs:
<强>讨论强>
可以调用在这些类主体中声明的实例方法 只有当它们覆盖可访问时才在封闭的枚举类型之外 封闭枚举类型中的方法。
枚举类型(第8.9节)不得声明为抽象;这样做会导致 在编译时错误。这是枚举类型E的编译时错误 除非E有一个或多个枚举,否则将抽象方法m作为成员 常量,以及所有E的枚举常量都有类主体 提供m的具体实现。这是一个编译时错误 用于声明抽象方法的枚举常量的类体。
枚举类型是隐式最终的,除非它包含至少一个枚举 具有类体的常数。无论如何,它是一个编译时 显式声明枚举类型为final的错误。
嵌套枚举类型是隐式静态的。这是允许的 显式声明嵌套的枚举类型是静态的。
另外this:
枚举类型除了枚举之外没有其他实例 常量。尝试显式是一个编译时错误 实例化枚举类型(§15.9.1)。