java enum访问问题的变量

时间:2014-01-08 00:09:19

标签: java enums

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

public class Foo {
  public enum Day { Monday, Tuesday, ...};
  ...
}

然后在另一个班级我有

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
    }
}

有人对此有解释吗?感谢。

2 个答案:

答案 0 :(得分:5)

原因是when you have an expression like Q.Id and Q is an expression of type T(Q是您的aFooT = Foo):

  

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

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

因此您需要使用Outerclass.Nestedclass来访问它。

答案 1 :(得分:3)

来自JLS §8.9

  

嵌套枚举类型隐式static。允许将嵌套的枚举类型显式声明为static

因此,通过Day实例访问Foo是没有意义的;它只能通过Foo类本身访问,就像在第一个print语句中一样。