GWT序列化不应该返回接口:参数和包含的对象怎么样?

时间:2013-01-15 09:30:11

标签: gwt gwt-rpc

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

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

,该怎么办?
public class MyReturnObject implements IsSerializable {
   List<String> listOfUnspecifiedType1;
   List<Long> listOfUnspecifiedType2;
   ...
}

我看到的所有例子都谈到了返回类型本身。我不明白为什么返回一个接口会出现问题,但返回一个只包装接口的对象并不成问题;但也许我错过了什么?

1 个答案:

答案 0 :(得分:3)

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

方法参数也是如此,不仅仅是返回类型及其字段:如果发送List<X>,则GWT必须为所有List类生成序列化代码:ArrayListLinkedList等。

当然,这同样适用于类,而不仅仅是接口:AbstractListList没有区别。

因为生成在优化之前,所以可能包含源路径中的所有可能类,而不仅仅是您在代码中使用的类;然后它们阻碍了优化传递,因为所有这些类都是现在你的应用程序使用。

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