枚举实例可以声明自己的公共方法吗?

时间:2014-06-03 05:23:35

标签: java enums

请考虑以下代码示例:

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无法解决它。

提前致谢...

1 个答案:

答案 0 :(得分:4)

MyEnum.SECOND.someOtherMethod()是非法的,因为这个规则与enum常量上的类主体有关:

  

可以在外部调用在这些类主体中声明的实例方法   只有当它们覆盖可访问的方法时才包含枚举类型   封闭的枚举类型。 [JLS§8.9.1]

因为someOtherMethod()不会覆盖MyEnum方法,所以您无法在MyEnum之外调用它。但是,你可以在SECOND的主体中的某个地方调用它,你甚至可以从enum之类的其他FIRST常量的主体调用它,尽管我没有尝试过,坦率地说这会有点奇怪。