我在GWT中有一个需要返回List的RPC服务.List可以填充各种类型的对象,所有对象都是可序列化的,并且所有对象都在我的服务的其他地方引用,因此它们应该可供GWT RPC使用.但是,除非我添加泛型类型参数(例如ArrayList
),否则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个genreated单位",所以你的下载速度会更快.
我建议创建一个名为"BaseResult"的空接口,然后让你返回的对象都实现该接口.
/** * Marker interface */ public interface BaseResult { }
然后指定rpc方法的返回类型是ArrayList:
public interface MyRpcService extends RemoteService { public ArrayListdoRpc(); }
然后确保您的返回对象都实现该接口.
public class UserInfo implements BaseResult {} public class Order implements BaseResult {}
现在,GWT编译器可以更轻松地优化代码.