GWT-序列化为超类

GWT-序列化为超类,gwt,serialization,Gwt,Serialization,我正在尝试从服务器向GWT中的客户端发送一个Game对象。此游戏对象仅包含一个玩家列表: public class Game implements Serializable { private List<Player> players; } 但是,游戏也可以包含一个CpuPlayer,这是一个带有附加人工智能逻辑的玩家 public class CpuPlayer extends Player { private PlayerIntelligence intelli

我正在尝试从服务器向GWT中的客户端发送一个
Game
对象。此游戏对象仅包含一个
玩家列表

public class Game implements Serializable {
    private List<Player> players;
}
但是,游戏也可以包含一个
CpuPlayer
,这是一个带有附加人工智能逻辑的
玩家

public class CpuPlayer extends Player {
    private PlayerIntelligence intelligence; // Not serializable
}
游戏
玩家
对象都在我的“共享”包中,应该在服务器端和客户端使用

但是,
CpuPlayer
包含许多内部处理数据,完全是服务器端的。因此,它不包括在GWT序列化白名单中

我想做的是将
CpuPlayer
作为
Player
发送到客户端,即在序列化过程中屏蔽所有子类特性

这种做法合理吗?有办法吗?我查看了自定义序列化,但它似乎不是那样工作的(我需要逐个序列化所有字段)

谢谢你的帮助,

Sébastien

我能想到的最简单的解决方案是使用一个库,将您需要的所有内容从CpuPlayer复制到播放器中。这就像打电话一样简单

Player-Player=new-DozerBeanMapper().map(cpuPlayer,Player.class);
(复制的性能开销可能可以忽略不计(亚毫秒))


另一种方法可能是使用RequestFactory而不是GWT-RPC,GWT-RPC的设计目的是只将服务器端对象的一部分传输到客户端(非常适合像您这样无法将整个内部数据发送到客户端的情况)。

我使用了您的第一种映射方法。在发送结果之前简单地添加一个过滤器要比更改调用我的服务的方式容易得多。
public class CpuPlayer extends Player {
    private PlayerIntelligence intelligence; // Not serializable
}