【问题标题】:Forcing GWT to assume List is implemented as ArrayList强制 GWT 假设 List 被实现为 ArrayList
【发布时间】:2010-12-21 16:16:49
【问题描述】:

由于某种原因,我被使用 List 作为集合类型的模型类所困扰,我想在客户端使用该模型。然而,GWT 当然无法序列化 java.util.List。然而,此模型中 List 的所有实现都基于 ArrayList。那么是否可以告诉 GWT 假设 List 是 ArrayList?

编辑 GWT 在编译时失败,因为 List 的可能候选者也是 java.util.Collections.SingeltonList - 无法编译。

我正在使用 GWT 2.1 和 Java 1.6。

【问题讨论】:

标签: java gwt


【解决方案1】:

您可以使用 GWT-RPC 黑名单来防止 GWT 在这种情况下尝试编译某些类。见this issue

【讨论】:

  • 将此行添加到我的 gwt.xml 中起到了神奇的作用:
【解决方案2】:

GWT RPC 应该正确序列化 ArrayList,因为它们实现了 java.io.Serializable。真的是序列化失败的列表还是列表中的类?

另一个常见警告:您的类中是否包含(必需的)无参数构造函数?

【讨论】:

  • 是的,构造函数就位。而 List 是一个 ArrayList,这可能是另一个问题。
  • 如果您只想对 GWT 进行序列化,请使用 IsSerializable 而不是 Serializable。它是一个空的标记界面,所以它不会与 Hibernate 之类的 ORM 系统相混淆。
【解决方案3】:

Gwt 为每个对象创建 javascript,并且 List 是更通用的类型,因为该编译器尝试生成 List 的所有功能,而 gwt 编译器不知道运行时。 而且GWT的“可序列化”概念与基于标准Java接口Serializable的序列化略有不同。 请参阅常见问题主题Does the GWT RPC system support the use of java.io.Serializable?

所有关于序列化规则的详细解释here

【讨论】:

  • 感谢您的提示,但这并不完全是我问题的答案。我没有必要使用模型和 List 属性,我只是希望我可以限制所有可能的 List o ArrayList 候选者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 2012-04-08
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多