2 回答
TA贡献1829条经验 获得超9个赞
根据 JLS §8.9.1。枚举常量 常量 主体受适用于匿名类的规则的约束,这些规则限制了字段和方法的可访问性:enum
枚举常量的可选类体隐式定义了一个匿名类声明 (§15.9.5),该声明扩展了立即封闭的枚举类型。类体由匿名类的通常规则管理;特别是它不能包含任何构造函数。只有在封闭枚举类型 (§8.4.8) 中声明的实例方法覆盖封闭枚举类型中的可访问方法时,才能在封闭枚举类型之外调用这些实例方法。
TA贡献1797条经验 获得超6个赞
enum Colours {
RED,
GREEN {
public static final int hex = 0x00ff00;
public final int hex2 = 0x00ff00; // Try it without static, just in case...
void f() {
System.out.println(hex); // OK
System.out.println(hex2); // OK
}
},
BLUE
}
在这里,和 都是 类型,不知道 , 或者 ,这就是你的代码无法编译的原因。REDGREENBLUEColourshexhex2f
您可以做的是在枚举定义中移动它们:
enum Colours {
RED(0xff0000, 0xff0000),
GREEN(0x00ff00, 0x00ff00),
BLUE(0x0000ff, 0x0000ff);
final int hex;
final int hex2;
Colours(int hex, int hex2) {
this.hex = hex;
this.hex2 = hex2;
}
void f() {
System.out.println(hex); // OK
System.out.println(hex2); // OK
}
}
这样,所有这些将编译:
System.out.println(Colours.GREEN.hex);
System.out.println(Colours.GREEN.hex2);
Colours.GREEN.f();
添加回答
举报