gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:03:55 25 4
gpt4 key购买 nike

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

返回类型:java.util.ArrayList
java.util.ArrayList
验证实例化
java.util.ArrayList
[警告] 检查所有符合序列化条件的 Object 子类型
添加“465”个新生成的单位

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

最佳答案

让我扩展一下 David Nouls 所说的话。 GWT 编译器无法读懂您的想法,因此当您未能指定返回类型可以是什么时,GWT 假定它可以是任何东西,并且必须做额外的工作以确保可以在 Javascript 客户端发生这种情况。

您确实应该指定能够返回哪些类型。这样做只有好处——因为编译器会生成更优化的代码,而不是生成处理“465 个类型化单元”的代码,因此您的下载速度会更快。

我建议创建一个名为“BaseResult”的空接口(interface),然后让您返回的所有对象都实现该接口(interface)。

/**
* Marker interface
*/
public interface BaseResult {
}

然后你指定你的 rpc 方法的返回类型是 ArrayList:
public interface MyRpcService extends RemoteService {
public ArrayList<BaseResult> doRpc();
}

然后确保您的返回对象都实现了该接口(interface)。
public class UserInfo implements BaseResult {}
public class Order implements BaseResult {}

现在 GWT 编译器将更容易优化您的代码。

关于serialization - 当我使用 ArrayList 时,如何防止 GWT 尝试包含每个可序列化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2210226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com