在GWT中使用EnumSet类

时间:2010-04-04 18:08:17

标签: gwt

我在客户端使用EnumSet时遇到问题。

我收到此运行时错误消息:

java.util.EnumSet.EnumSetImpl不是默认的可实例化的(它必须是 有一个零参数构造函数或根本没有构造函数)并且具有 没有自定义序列化器。

这是一个已知问题吗?

这是我正在做的事情(基本上是一个hello world app)

服务

String echo (EnumSet<Names> name) throws IllegalArgumentException;

客户端:

echoServ.echo (EnumSet.of(Names.JOHN), new AsyncCallback<String>()
{ ....... });

共享枚举类     枚举名称{JOHN,NUMAN,OBAMA}

2 个答案:

答案 0 :(得分:4)

这是GWT限制 - 请参阅http://code.google.com/p/google-web-toolkit/issues/detail?id=3028

最简单的解决方法是使用HashSet直到修复

答案 1 :(得分:0)

似乎问题是EnumSet根据GWT的规则不可序列化:

  1. 可分配给IsSerializable或Serializable,因为它直接实现其中一个接口,或者因为它派生自一个超类
  2. 所有非最终的非瞬态实例字段本身都是可序列化的,
  3. 从GWT 1.5开始,必须有一个默认(零参数)构造函数(使用任何访问修饰符)或根本没有构造函数
  4. 有关详细信息,请参阅docs