GWT 序列化不应返回接口(interface) : what about parameters and contained objects?

标签 gwt gwt-rpc

关于 GWT RPC 中的方法不应该返回像 List 这样的接口(interface),而应该返回像 ArrayList 这样的具体类这一事实,已经存在一些问题,因为否则“GWT 需要包含所有可能的实现” ”。参见例如In GWT, why shouldn't a method return an interface?

这是我的问题:这是否仅限于返回类型本身?该方法的参数怎么样?如果返回对象包含接口(interface),例如

public class MyReturnObject implements IsSerializable {
   List<String> listOfUnspecifiedType1;
   List<Long> listOfUnspecifiedType2;
   ...
}

我见过的例子都讨论了返回类型本身。我不明白为什么返回一个接口(interface)是一个问题,但返回一个仅包装接口(interface)的对象却不是问题;但也许我错过了一些东西?

最佳答案

从链接的问题中可以清楚地看出,它是递归应用的(一旦您理解为什么应该尽可能使用派生最多的类型,很明显它是递归的)。

方法参数也是如此,不仅仅是返回类型及其字段:如果您发送 List<X>那么 GWT 必须为所有 List 生成序列化代码类(class):ArrayList , LinkedList

当然,这同样适用于类,而不仅仅是接口(interface):AbstractListList 没有什么不同.

由于生成发生在优化之前,因此将包含源路径中所有可能的类,而不仅仅是您在代码中使用的类;然后它们会妨碍优化过程,因为所有这些类现在都被您的应用使用。

因此,规则是:尽可能使用最具体的类型。推论是:不要害怕 DTO,不要尝试不惜一切代价发送您的业务/域对象

关于GWT 序列化不应返回接口(interface) : what about parameters and contained objects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14334644/

相关文章:

gwt - 远程调用ejb

java - GWT RPC 如何发送任何对象

java - 使用 GWT 通过 ID 获取 DIV 名称

java - GWT、Enum、RadioButton 和编辑器框架

java - 区分浏览器选项卡关闭和刷新(以检测应用程序的多个实例)

java - NoSuchMethodError : com. google.common.base.Platform.systemNanoTime() 在 GWT 项目中

java - GWT RPC : ClassNotFoundException

gwt - 如何确定为什么在GWT-RPC中触发onFailure?

GWT - 偶尔出现 com.google.gwt.user.client.rpc.SerializationException

GWT-RPC 和不可变传输对象