带接口的枚举类成员无法在内部找到方法

kco*_*ock 10 java enums interface

我有一个奇怪的问题,我不确定它是编译器问题还是我对带接口的枚举的理解.我正在使用IntelliJ IDEA 12,构建一个Android项目,我有一个这样的类:

public class ClassWithEnum {
    private MyEnum myEnum;

    //Trying to access it internally here throws the error
    public boolean isActionable() {
        return myEnum.isActionable();
    }

    public enum MyEnum implements Action {
        ACTIONABLE() {
            @Override
            public boolean isActionable() { return true; }
        },
        NOT_ACTIONABLE() {
            @Override
            public boolean isActionable() { return false; }
        }
    }

    public interface Action {
        public boolean isActionable();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这是最初的工作,但现在编译器正在抱怨(我已经在一个全新的项目中尝试了这个以及相同的结果)并出现错误:

java: /Users/kcoppock/Documents/Projects/EnumInterfaceTest/src/com/example/EnumInterfaceTest/ClassWithEnum.java:11: cannot find symbol
symbol  : method isActionable()
location: class com.example.EnumInterfaceTest.ClassWithEnum.MyEnum
Run Code Online (Sandbox Code Playgroud)

我之前已经完成了这个(由接口定义的行为的枚举)没有问题.有什么想法吗?

Vis*_*l K 8

您需要自己实现isActionable()方法MyEnum.因为在isActionable()里面定义的方法ACIONABLENOT_ACTIONABLE它们是本地的.所以你需要全局方法MyEnum enum.

请改用此代码:

public enum MyEnum implements Action {
        ACTIONABLE() {
            @Override
            public boolean isActionable() { return true; }
        },
        NOT_ACTIONABLE() {
            @Override
            public boolean isActionable() { return false; }
        };
        @Override
        public boolean isActionable() { return false;}
    }
Run Code Online (Sandbox Code Playgroud)