[英]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
}
Game
和Player
对象都在我的“共享”包中,应该在服务器和客户端上使用。
但是, 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.