luk*_*sen 10 java gwt enums gwt-rpc
我有一个带嵌套枚举的枚举(我想私有),但是当我这样做时,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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我从嵌套枚举中删除私有修饰符,则代码可以正常工作.为什么GWT不允许嵌套枚举的私有修饰符?有解决方法吗?
序列化工作得很好,至少对于您提供的示例是这样。所有枚举都通过以下方式进行序列化/反序列化(GWT 2.4、2.3、2.2):
public static OuterEnum instantiate(SerializationStreamReader streamReader) throws SerializationException {
int ordinal = streamReader.readInt();
OuterEnum[] values = OuterEnum.values();
assert (ordinal >= 0 && ordinal < values.length);
return values[ordinal];
}
public static void serialize(SerializationStreamWriter streamWriter, OuterEnum instance) throws SerializationException {
assert (instance != null);
streamWriter.writeInt(instance.ordinal());
}
Run Code Online (Sandbox Code Playgroud)
例如,我并不关心里面用什么。只有序数通过网络传递。这意味着其他地方有问题,GWT 根本不关心枚举内部的内容,因为它不是通过网络传输的(枚举应该是不可变的,不需要传输其状态)。我想你的问题可能是这样的:
public class OuterClass implements Serializable{
private OuterEnum.NestedEnum nested;
private OuterEnum outer;
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个例子与前一个例子非常不同。假设 GWT-RPC 服务中使用了 OuterClass。由于 NestedEnum 用作 OuterClass 的字段,因此 GWT 需要为其创建一个 TypeSerializer。但由于 TypeSerializer 是一个单独的类,因此它无法访问 NestedEnum(因为它是私有的)。所以编译失败。
这基本上是您的示例不起作用的唯一情况。某些特定的 GWT 版本中可能存在一些错误,但我 100% 确定您的示例适用于 gwt 2.2-2.4 。
归档时间: |
|
查看次数: |
1540 次 |
最近记录: |