我目前正在从事一个编写国际象棋游戏的独立项目。我当前面临的问题是我有一个方法返回 Move 类型的数组列表(不言自明),该方法在确定所有合法移动时被调用。虽然这工作得很好,但我引入了一个名为 CaSTLe 的类,它扩展了 Move(我这样做是因为与正常的移动不同,易位会影响 4 个方格,而不仅仅是 2 个方格)。
我希望 getMoves() 方法是独立的,或者能够返回所有有效的移动,包括 Move 类型的对象及其子 CaSTLe。
问题是,如果我包含一个将有效的王位移动添加到方法 getMoves 的声明(它返回 move 类型的数组列表),我可以 a.) 将 arraylist 添加为 move 类型,其中信息会丢失,或 b.) 一个 caSTLe 类型,它将返回的 arraylist 更改为 all caSTLe 类型,并且显然破坏了该方法。
有什么优雅的方法可以实现这一点吗?我正在寻找解决此问题的方法,而无需重写 move 类,同时保持 getMoves 方法独立。
最佳答案
您可以使用移动对象的数组列表并使用instanceof运算符检查城堡对象。然后将对象强制转换为城堡类型。
if( moveobject instanceof Castle){
Castle castleobject = (Castle) moveobject;
//用 caSTLeobject 做任何你想做的事情
}
关于Java ArrayLists : Adding parent class and sub class to the same arraylist,解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42172363/