2

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

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

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

我见过的例子都是关于返回类型本身的。我不明白为什么返回一个接口会是一个问题,但返回一个只包装一个接口的对象却不是问题;但也许我错过了什么?

4

1 回答 1

3

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

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

当然,这同样适用于类,不仅是接口:AbstractListList.

而且因为生成是在优化之前,源路径中所有可能的类都将被包括在内,不仅是您在代码中使用的那些;然后它们会阻碍优化过程,因为所有这些类现在都被您的应用程序使用。

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

于 2013-01-15T09:42:42.560 回答