【发布时间】:2011-10-18 10:37:58
【问题描述】:
我有一个带有嵌套枚举的枚举(我想将其设为私有),但是当我这样做时,GWT 告诉我嵌套枚举不可见并引发异常。
public enum OuterEnum {
A(NestedEnum.X),
B(NestedEnum.Y),
C(NestedEnum.X);
NestedEnum nestedValue;
private OuterEnum(NestedEnum nv) { nestedValue = nv; }
private enum NestedEnum {
X, Y;
}
}
如果我从嵌套枚举中删除私有修饰符,那么代码就可以工作。为什么 GWT 不允许嵌套枚举的私有修饰符?有解决办法吗?
【问题讨论】:
-
你试过让它静态吗?
-
这真的很酷! JLS(第 8.9 节)明确指出“嵌套枚举类型是隐式静态的。允许将嵌套枚举类型显式声明为静态。”这不适用于嵌套在
enums 中的enums 还是GWT 编译器中的一个小缺陷? -
...而 GWT 编译器仅使用 Eclipse 编译器 (ECJ) 来解析源代码并构建 AST。因此,要么 Eclipse 编译器有一个错误,即没有将枚举暴露为静态,要么 GWT 有一个错误,即没有为嵌套枚举推断静态标志(我会选择 ECJ,但这真的取决于他们的意图;它可能是设计使然)。
-
....好吧,我觉得自己很愚蠢....以前的构建中有一些东西挂在上面,结果证明将其设为静态并没有什么不同...。回到图纸木板。对不起各位!
-
您使用的是什么 GWT 版本?在 GWT 2.4.0 中,您的示例可以正常工作。