当我使用ArrayList时,如何防止GWT尝试包含每个可序列化的类

Sea*_*ean 11 gwt serialization gwt-rpc

我在GWT中有一个需要返回List的RPC服务.List可以填充各种类型的对象,所有对象都是可序列化的,并且所有对象都在我的服务的其他地方引用,因此它们应该可供GWT RPC使用.但是,除非我添加泛型类型参数(例如ArrayList<String>),否则GWT会给出警告:

Return type: java.util.ArrayList
    java.util.ArrayList
      Verifying instantiability
         java.util.ArrayList
            [WARN] Checking all subtypes of Object which qualify for serialization`
Adding '465' new generated units

本质上,我只想要一种方法来声明List或ArrayList而不用GWT试图为类路径上的每个可序列化对象生成代码.难道没有办法告诉GWT我知道我在做什么而不是发疯?

fil*_*lsa 5

让我来看看David Nouls所说的话.GWT编译器无法读懂您的想法,因此当您未能指定返回类型的内容时,GWT会假定它可以是任何内容,并且必须做额外的工作以确保可以在Javascript客户端进行.

你真的应该指定哪些类型可以返回.只有上升空间,这样做 - 因为编译器会产生更优化的代码,而不是生成的代码来处理"465个genreated单位",所以你的下载速度会更快.

我建议创建一个名为"BaseResult"的空接口,然后让你返回的对象都实现该接口.

/**
 * Marker interface 
 */
public interface BaseResult {
}
Run Code Online (Sandbox Code Playgroud)

然后指定rpc方法的返回类型是ArrayList:

public interface MyRpcService extends RemoteService {
  public ArrayList<BaseResult> doRpc();
}
Run Code Online (Sandbox Code Playgroud)

然后确保您的返回对象都实现该接口.

public class UserInfo implements BaseResult {}
public class Order implements BaseResult {}
Run Code Online (Sandbox Code Playgroud)

现在,GWT编译器可以更轻松地优化代码.