в моем коде я использовал много операторов if-else.Я узнал, что операторы if-else и switch не являются элегантным способом кодирования. Есть ли хороший способ реорганизовать следующий код?
Wall, Trap, Door и Floor являются подклассом Tile
public class Player{
...
public void move(DIR dir) throws Exception {
Position nextPos = checkMove(dir);
Tile nextTile = TileManager.getTileType(nextPos.getSeq());
if (nextTile instanceof Floor) {
walk();
} else if (nextTile instanceof Wall) {
block();
} else if (nextTile instanceof Trap) {
trap();
} else if (nextTile instanceof Door) {
unlock();
}
}
public void walk(){
...
}
public void block(){
...
}
public void trap(){
...
}
...
}
Я пытался решить эту проблему с помощью перегрузки метода
public void move1(DIR dir) throws Exception {
Position nextPos = checkMove(dir);
System.out.println(nextPos);
Tile nextTile = TileManager.getTileType(nextPos.getSeq());
moveTo(nextTile);
}
public void moveTo(Floor next) throws Exception {
walk();
}
public void moveTo(Wall next) throws Exception {
block();
}
...
, и есть ошибка компиляции
Метод move1 (Floor) в типеПлеер не применим для аргументов (плитка)
Я читал пост, в котором говорится, что универсальный тип может быть решением, но я не знаю, как его реализовать.