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

Bar*_*man 5 java enums

请考虑以下代码示例:

public enum MyEnum {

    FIRST {
        @Override
        public void someMethod() {
            ...
        }
    },

    SECOND {
        @Override
        public void someMethod() {
            ...
        }

        public void someOtherMethod() {
            ...
        }
    };


    public abstract void someMethod();
}         
Run Code Online (Sandbox Code Playgroud)

可以打电话someOtherMethod()吗?我试过MyEnum.SECOND.someOtherMethod()但是IDE无法解决它.

提前致谢...

ajb*_*ajb 4

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

\n\n
\n

仅当这些类体中声明的实例方法重写了封闭枚举类型中的可访问方法时,才可以在封闭枚举类型外部调用这些实例方法。[JLS\xc2\xa78.9.1]

\n
\n\n

因此,由于someOtherMethod()不重写MyEnum方法,因此您无法在MyEnum. 但是,您可以在 主体中的某处调用它SECOND,甚至可以从其他enum常量之一(例如 )的主体中调用它FIRST,尽管我还没有尝试过,坦率地说,这有点奇怪。

\n