-7
while (Board[randRow][randColumn] instanceof Wumpus || Board[randRow][randColumn] instanceof Gold
|| Board[randRow][randColumn] instanceof Pit)
如何用多态性替换instanceof?如何用多态性替换instanceof关键字?
while (Board[randRow][randColumn] instanceof Wumpus || Board[randRow][randColumn] instanceof Gold
|| Board[randRow][randColumn] instanceof Pit)
如何用多态性替换instanceof?如何用多态性替换instanceof关键字?
什么是Wumpus
,Gold
和Pit
? 可以说,僵尸/怪物对这种类型的细胞感兴趣。
所以定义一个接口:
public interface Cell{
boolean isInterestedForMonster();
}
并执行它为Wumpus
,Gold
和Pit
:
public class Gold implements Cell{
@Override public boolean isInterestedForMonster(){
return true;
}
}
使用:
Cell cell = Board[randRow][randColumn];
while(cell.isInterestedForMonster()){
//Do something
}
这就是你如何更换“的instanceof '具有多态性
取决于你想用它做什么。您可以调用在通用基类中定义的方法,例如'Board [randRow] [randColumn] .foo()',其中'foo()'在一个通用接口或抽象超类中是抽象的,并在每个子类中实现。 – Andy
如果您想检查具体类型,只需将此检查作为单独的方法添加并在每个子类中覆盖它们即可。因为这些检查是您业务逻辑的一部分 – maks