从枚举中访问超类变量

Zip*_*ppy 0 java enums enumeration object

有没有办法在枚举本身内设置枚举父/超类中保存的变量?(以下不编译,但说明了我试图实现的目标)....

class MyClass{

    ObjectType type;        
    String someValue;


    public void setType(ObjectType thisType){

        type = thisType;

    } 

    enum ObjectType {

        ball{
            @Override
            public void setValue(){
                someValue = "This is a ball";  //Some value isn't accessible from here
            }
        },
        bat{
            @Override
            public void setValue(){
                someValue = "This is a bat";  //Some value isn't accessible from here
            }
        },

        net{
            @Override
            public void setValue(){
                someValue  = "This is a net";  //Some value isn't accessible from here
            }
        };

        public abstract void setValue();
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,像这样:

MyClass myObject = new MyClass();
myObject.setType(ObjectType.ball);
Run Code Online (Sandbox Code Playgroud)

完成上述操作后,myObject的'someValue'字符串现在应设置为'This is a ball'.

有没有办法做到这一点?

ska*_*man 6

嵌套enum类型是隐式静态的(请参阅是否将java枚举变量设为静态?).这包括enum声明为内部类的类型,因此它们无法访问外部类的实例字段.

你不能做你想要做的事情enum,你必须把它建模为普通的类.

  • @DavidEhrmann"enum"类型不能"扩展"任何东西. (5认同)