java enum访问问题的变量

use*_*579 3 java enums

我看到一个奇怪的情况,并想知道我是否错过了什么.我有一个类定义这样的枚举

public class Foo {
  public enum Day { Monday, Tuesday, ...};
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后在另一堂课我

public class Bar {
    Foo aFoo=new Foo();

    void test(){
       System.out.println(Foo.Day.Monday);  // ok
       System.out.println(aFoo.Day.Monday);  // complie error Day not accessible
    }
}
Run Code Online (Sandbox Code Playgroud)

有人对此有解释吗?谢谢.

ass*_*ias 5

原因是当你有一个类似的表达式Q.Id并且Q是一个类型的表达式T(Q是你的aFooT = Foo):

如果类型T 没有一个可访问的(§6.6)成员是名为Id的字段,则会发生编译时错误.

换句话说,您可以使用instance(aFoo.someStaticVariable)引用静态字段,但不能引用嵌套类.

所以你需要Outerclass.Nestedclass用来访问它.