深度复制具有不同类

时间:2015-05-30 20:55:01

标签: java inheritance multidimensional-array deep-copy

我正在用Java实现Stratego AI。 人工智能需要做的一件事就是看看未来可能采取的行动。为此,它应该能够获得当前电路板位置的副本,在那里移动部件(当然不会影响主板),并通过查看前面的多个移动来选择最佳移动(使用MiniMax算法)。

但是,我在使用复制主板部分时遇到问题。我的电路板存储为StrategoPieces的二维阵列:

StrategoPiece board[][];

现在,Stratego的一些部分有特殊规则。我为Spy,Scout,Miner,Flag和Bomb创建了特殊课程,这些课程都继承自StrategoPiece课程。

因此,对于空方块,该板包含'null',如果被占用,则该对象包含StrategoPiece的子类。

我想要复制这个板子,但我无法弄清楚如何制作一个正确的深层复制品。阅读StackOverflow和互联网上的其他地方,我发现了以下几条信息:

  • 要制作(非原始)数组的深层副本(在一个或多个维度中),需要逐个复制所有对象。
  • Object.clone()不像大多数人想要的那样工作,并且正确实现这一点很困难。
  • 建议改为创建“工厂”或“构造函数”方法。

然而,我想知道的是,当我拥有一个包含多个类的对象数组时,我可以创建这样的Factory或Constructor Copy方法(所有类都继承自相同的基类,但有些具有额外的逻辑连接的)。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

深度复制复杂对象是您不希望自己实现的,因为它很难正确执行,并且有很好的框架可以为您解决问题。

例如,您可以查看DozerKryo