为了账号安全,请及时绑定邮箱和手机立即绑定

Java 枚举值字段在定义之外不可访问

Java 枚举值字段在定义之外不可访问

翻过高山走不出你 2022-09-07 17:59:57
在下面的代码中,枚举值的成员字段在枚举定义之外不可访问:ColoursGREENpublic class Test {    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    }    public static void main(String[] args) {        System.out.println(Colours.GREEN.hex);      // COMPILE ERROR        System.out.println(Colours.GREEN.hex2);     // COMPILE ERROR    }}有问题的行会导致以下编译器错误:Error:(38, 41) java: cannot find symbol  symbol:   variable hex  location: variable GREEN of type Test.Colours任何想法为什么这不起作用?我假设Java标准禁止它,但为什么呢?
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

根据 JLS §8.9.1。枚举常量 常量 主体受适用于匿名类的规则的约束,这些规则限制了字段和方法的可访问性:enum

枚举常量的可选类体隐式定义了一个匿名类声明 (§15.9.5),该声明扩展了立即封闭的枚举类型。类体由匿名类的通常规则管理;特别是它不能包含任何构造函数。只有在封闭枚举类型 (§8.4.8) 中声明的实例方法覆盖封闭枚举类型中的可访问方法时,才能在封闭枚举类型之外调用这些实例方法。


查看完整回答
反对 回复 2022-09-07
?
互换的青春

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();


查看完整回答
反对 回复 2022-09-07
  • 2 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信