Java 引用枚举实例作为该类型另一实例的字段是否合法?
在主功能中,Java 引用枚举实例作为该类型另一实例的字段是否合法?,java,enums,static-members,Java,Enums,Static Members,在主功能中,e是通过Day.SAT初始化的,但是为什么e.MON不是一个错误呢?初始化它有意义吗?枚举值几乎是“唯一的”静态final字段。在Java中,您可以通过引用访问静态字段。然而,你不应该这样做,因为这让人困惑 本质上,这两行做的是相同的事情(假设有一个daye在它们上面的某个地方定义): e、 MON“像”通过类的实例变量访问该类的静态成员,因此不会显示错误。为什么会抛出错误?它完全按照你告诉它的去做。如果你想输出你初始化的日期,你只需要System.out.println(e)当前代
e
是通过Day.SAT
初始化的,但是为什么e.MON
不是一个错误呢?初始化它有意义吗?枚举值几乎是“唯一的”静态final
字段。在Java中,您可以通过引用访问静态字段。然而,你不应该这样做,因为这让人困惑
本质上,这两行做的是相同的事情(假设有一个daye
在它们上面的某个地方定义):
e、 MON“像”通过类的实例变量访问该类的静态成员,因此不会显示错误。为什么会抛出错误?它完全按照你告诉它的去做。如果你想输出你初始化的日期,你只需要
System.out.println(e)代码>当前代码不会抛出错误,但会抛出关于静态访问的警告。(e.MON不是静态访问,你可以使用Day.MON)另外,作为一个快速的参考,你应该用驼峰案例标记你的类:我随意删除了一些与问题无关的代码。请阅读我知道这是离题的,但我这样做是为了所有不太幸运阅读你的代码的人,因为对我来说,这很痛苦。试着用daye=null替换e
代码>并查看发生了什么;)@SHTester请不要在编译器错误中使用“throw”。在运行时抛出异常。
enum Day{SAT,SUN,MON,TUE,WED,THURS,FRI}
class Plan{
Day d;
public plan(Day d)
{
this.d=d;
}
Day getDay()
{
return d;
}
}
class tester{
public static void main(String[] args){
Plan p=new Plan(Day.SAT);
Day e=p.getDay();
System.out.println(e.MON);
}
}
System.out.println(Day.MON); // sane, normal way
System.out.println(e.MON); // supported, but discouraged way.