首页 > 解决方案 > Java - 从覆盖的方法访问枚举的私有字段

问题描述

我在玩枚举,我发现这段代码无法编译:

class TrafficLight{
    enum Color{
        RED(23){
            private int y=5;
            @Override
            public int sum(){
                return val+y;
            }
        }, 
        GREEN(24);
        private int val;
        Color(int x){
            val=x;
        }
        public int sum(){
            return val;
        }
    }
}

错误是:non-static variable cannot be referenced from a static context

但是,如果我将访问修饰符更改val为受保护,则代码编译不会出现问题。

我试图理解为什么会发生这种情况。有人告诉我,我可以将枚举视为具有匿名子类的静态类(每个离散值都有一个子类)。

我想它可能适合,因为如果该字段受到保护,它可以从内部访问RED,但是因为RED没有自己的构造函数,他自己的构造函数val不会被初始化,所以如果val是私有的,它没有任何东西可以使用权。

我想知道这是否是思考枚举的正确方法,以及我的解释是否合理。

非常感谢。

标签: javaenums

解决方案


我认为枚举是不可变的值类,其中的值代表所有可能的实例。我什至不知道可以对枚举进行子类化。


推荐阅读