我在GWT中有一个需要返回列表的RPC服务.列表可以填充各种类型的对象,所有这些对象都是可序列化的,并且所有对象都在我的服务中引用,因此它们应该可用于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我知道我在做什么,不要疯了吗?
解决方法
让我谈谈David Nouls所说的话. GWT编译器无法读取您的头脑,所以当您无法指定返回类型可以是什么,GWT假定它可以是任何东西,并且必须做额外的工作,以确保可以发生在Javascript客户端.
你真的应该指定能够返回哪些类型.只有这样做是有利的,因为编译器将生成更优化的代码,而不是生成代码来处理“465个处理单元”,因此您的下载速度将更快.
我建议创建一个名为“BaseResult”的空接口,然后让您返回的对象都实现该接口.
/** * Marker interface */ public interface BaseResult { }
然后你指定你的rpc方法的返回类型是ArrayList:
public interface MyRpcService extends RemoteService { public ArrayList<BaseResult> doRpc(); }
然后确保您的返回对象都实现该接口.
public class UserInfo implements BaseResult {} public class Order implements BaseResult {}
现在,GWT编译器将为您的代码更容易的优化时间.