Java ArrayLists : Adding parent class and sub class to the same arraylist,解决方案

标签 java arraylist subclass

我目前正在从事一个编写国际象棋游戏的独立项目。我当前面临的问题是我有一个方法返回 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/

相关文章:

java - 如何在 Eclipse 中清理/删除 Maven 项目的 "target"目录

尝试查找文件中最常出现的单词时,Java ArrayIndexOutOfBoundsException 不断出现

Java Spring 急切获取 Hibernate 子类失败

javascript - 从子类调用父类(super class)方法 - JavaScript

java, swing - 在 JScrollPane 中添加 JlayeredPane 仅显示空白背景

java - JScrollPane:如何自动调整滚动中包含的 JPanel 的大小

java - 同步定期更新和创建、更新、删除操作

java - 如何将ArrayList存储在文件中?

java - 通过 ArrayList 进行搜索

java - 创建子类只是为了在不同子类之间进行转换