请考虑以下代码示例:
public enum MyEnum {
FIRST {
@Override
public void someMethod() {
...
}
},
SECOND {
@Override
public void someMethod() {
...
}
public void someOtherMethod() {
...
}
};
public abstract void someMethod();
}
是否可以致电someOtherMethod()
?我尝试了MyEnum.SECOND.someOtherMethod()
,但IDE无法解决它。
提前致谢...
答案 0 :(得分:4)
MyEnum.SECOND.someOtherMethod()
是非法的,因为这个规则与enum
常量上的类主体有关:
可以在外部调用在这些类主体中声明的实例方法 只有当它们覆盖可访问的方法时才包含枚举类型 封闭的枚举类型。 [JLS§8.9.1]
因为someOtherMethod()
不会覆盖MyEnum
方法,所以您无法在MyEnum
之外调用它。但是,你可以在SECOND
的主体中的某个地方调用它,你甚至可以从enum
之类的其他FIRST
常量的主体调用它,尽管我没有尝试过,坦率地说这会有点奇怪。