java - 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
是私有的,它没有任何东西可以使用权。
我想知道这是否是思考枚举的正确方法,以及我的解释是否合理。
非常感谢。
解决方案
我认为枚举是不可变的值类,其中的值代表所有可能的实例。我什至不知道可以对枚举进行子类化。
推荐阅读
- nginx - Nginx 将选定的 URL 从 http 重定向到 https
- javascript - JavaScript中学习“闭包”的例子出现错误
- python - 如何检查子图之间的同构
- javascript - 你如何检查一个 Scratch 项目是否通过它的 ID 共享?
- mongodb-realm - MongoDb Realm 仅同步某些模式
- firebase - 如何将firebase_auth的用户信息与上传到其他数据库的文件链接起来
- python - 如何在Python中用'替换\'?
- firebase - PERMISSION_DENIED:权限缺失或不足 - Flutter
- java - 我如何将共享首选项中的数据检索到片段中
- javascript - 溢出适用于 Excel Online,但不适用于 Excel for Windows