繁体   English   中英

GWT-序列化为超类

[英]GWT - Serialize as superclass

我正在尝试将Game对象从服务器发送到GWT的客户端。 这个Game对象只包含一个Player列表:

public class Game implements Serializable {
    private List<Player> players;
}

Player是一种简单的Pojo,其中包含玩家的状态,例如姓名,剩余寿命等。

public class Player implements Serializable {
    private String name;
    private int numberOfGamesPlayed;
    private double hp, initialHp;
}

但是,游戏也可以包含CpuPlayer ,即具有附加人工智能逻辑的Player

public class CpuPlayer extends Player {
    private PlayerIntelligence intelligence; // Not serializable
}

GamePlayer对象都在我的“共享”包中,应该在服务器和客户端上使用。

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

我想做的就是将CpuPlayer作为Player发送给客户端,即在序列化过程中掩盖所有子类的特性。

这种方法听起来合理吗? 有没有办法做到这一点? 我研究了自定义序列化,但是它似乎没有这种方式(我需要一个接一个地序列化所有字段)。

谢谢你的帮助,
塞巴斯蒂安

我能想到的最简单的解决方案是使用Dozer之类的库将所需的所有内容从CpuPlayer复制到Player。 这就像调用一样简单

Player player = new DozerBeanMapper().map(cpuPlayer, Player.class);

(复制的性能开销可能微不足道(以毫秒为单位))。

另一种方法是使用RequestFactory而不是GWT-RPC,后者旨在仅将服务器端对象的一部分传输到客户端(对于像您这样的情况,这是您无法将全部内部数据发送到客户端的情况的理想选择)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM