java - 枚举实例可以声明自己的公共(public)方法吗?

标签 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 无法解析它。

提前致谢...

最佳答案

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

Instance methods declared in these class bodies may be invoked outside the enclosing enum type only if they override accessible methods in the enclosing enum type. [JLS §8.9.1]

因此,由于 someOtherMethod() 不会覆盖 MyEnum 方法,因此您不能在 MyEnum 之外调用它。但是,您可以在 SECOND 的主体中的某处调用它,甚至可以从其他 enum 常量之一的主体中调用它,例如 首先,虽然我还没有尝试过,坦率地说,这会有点奇怪。

关于java - 枚举实例可以声明自己的公共(public)方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24007671/

相关文章:

java - 无需转换即可按位将 float 转换为 int

java.lang.ClassNotFoundException 与 IntelliJ

java - 使用 Maven 运行 Jersey 示例

python - 如何在 Python 中键入提示字符串的枚举

ios - 将应用程序转换为 64 位时对 typedef 枚举发出警告

com - 访问 COM 对象中的枚举 [jscript]

java - 如何限制 JFileChooser 只允许选择特定数量的文件?

java - 将数据输入 Google Cloud Datastore

c# - 类型 'MyEnum' 的表达式不能用于类型的参数

c# - 在 [Authorize(Roles)] 上使用枚举 [Flags] 和按位运算符