gpt4 book ai didi

java - 如何从 GWT 的序列化策略中删除实现类型?

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:30 26 4
gpt4 key购买 nike

这个问题的反义词:How do I add a type to GWT's Serialization Policy whitelist?

GWT 正在向序列化策略添加不需要的类型并使我的 JS 膨胀。如何手动调整我的 GWT 白名单?或者我根本不应该?

例如,如果我将接口(interface) List 放在 GWT RPC 服务类上,GWT 必须生成处理 ArrayList、LinkedList、Stack、Vector 等的 Javascript,即使我的团队知道我们只会返回一个数组列表。我可以将方法的返回类型设为 ArrayList,但我喜欢依赖接口(interface)而不是特定的实现。毕竟,也许有一天我们会把它调高并返回,例如一个链表。在这种情况下,我想强制 GWT 序列化策略只针对 ArrayList 和 LinkedList 进行编译。没有堆栈或 vector 。

这些隐式限制有一个我能想到的巨大缺点:团队的新成员开始返回 Vectors,这将是一个运行时错误。那么除了标题中的问题之外,您对此进行设计的经验是什么?

最佳答案

有一个属性可以将此类列入黑名单。例如,要将非 ArrayList 集合列入黑名单,请将这些行添加到您的 *.gwt.xml 中:

<extend-configuration-property name="rpc.blacklist" value="java.util.HashSet"/>
<extend-configuration-property name="rpc.blacklist" value="java.util.LinkedHashSet"/>
<extend-configuration-property name="rpc.blacklist" value="java.util.LinkedList"/>
<extend-configuration-property name="rpc.blacklist" value="java.util.Stack"/>
<extend-configuration-property name="rpc.blacklist" value="java.util.TreeMap"/>
<extend-configuration-property name="rpc.blacklist" value="java.util.TreeSet"/>
<extend-configuration-property name="rpc.blacklist" value="java.util.Vector"/>

当我通过网络发送 GWT 的内置 com.google.gwt.user.client.ui.SuggestOracle$Response 对象时,这对于减小 JS 大小是必要的。这些对象包含一个 java.util.Collection,但我知道我只会发回一个 ArrayList。

我仍然尊重在其他回复、评论和我的原始问题中讨论的编译时检查的优点。事实上,如果 GWT 开始选择额外的实现来序列化(为什么这不是白名单?),这是一个不稳定的解决方案。然而,这个“rpc.blacklist”属性让我免于滚动我自己的 SuggestOracle 以获得更具体的集合类型。

关于java - 如何从 GWT 的序列化策略中删除实现类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120142/

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