我似乎无法从枚举中访问周围类的实例成员,因为我可以从内部类中访问。这是否意味着枚举是静态的?是否可以访问周围类的实例的范围,或者我是否必须将实例传递到我需要它的枚举方法中?
public class Universe {
public final int theAnswer;
public enum Planet {
// ...
EARTH(...);
// ...
// ... constructor etc.
public int deepThought() {
// -> "No enclosing instance of type 'Universe' is accessible in this scope"
return Universe.this.theAnswer;
}
}
public Universe(int locallyUniversalAnswer) {
this.theAnswer = locallyUniversalAnswer;
}
}
答案 0 :(得分:169)
答案 1 :(得分:46)
创建实例级(非静态)内部枚举类是没有意义的 - 如果枚举实例本身与外部类绑定,则会破坏枚举保证 -
e.g。如果你有
public class Foo {
private enum Bar {
A, B, C;
}
}
使枚举值正确地充当常量,(伪代码,忽略访问限制)
Bar b1 = new Foo().A
Bar b2 = new Foo().A
b1和b2必须是相同的对象。