我看到一个奇怪的情况,并想知道我是否错过了什么。我有一个类定义这样的枚举
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
}
}
有人对此有解释吗?感谢。
答案 0 :(得分:5)
原因是when you have an expression like Q.Id
and Q
is an expression of type T
(Q是您的aFoo
和T = Foo
):
如果T 类型中只有一个可访问的(§6.6)成员是名为Id 的字段,则会发生编译时错误。
换句话说,您可以使用实例(aFoo.someStaticVariable
)引用静态字段,但不能引用嵌套类。
因此您需要使用Outerclass.Nestedclass
来访问它。
答案 1 :(得分:3)
来自JLS §8.9:
嵌套枚举类型隐式
static
。允许将嵌套的枚举类型显式声明为static
。
因此,通过Day
实例访问Foo
是没有意义的;它只能通过Foo
类本身访问,就像在第一个print语句中一样。