Как избежать instanceof, если я могу получить только объекты определенного класса, но мой метод может работать только на подклассе - PullRequest
0 голосов
/ 08 марта 2020

Specifi c Пример: у меня есть класс Track и класс Track-switch, который расширяет класс track.

class Track {}

class Switch extends Track {
   boolean state;

   void changeState() {
      state = !state;
   }
}

У меня есть класс Railway, который привязывает идентификаторы к трекам.

class Railway {
   Map<Integer, Track> IDMap = new Hashmap<>();

   void changeSwitch(Integer id) {
      Track temp = IDMap.get(id);

      if (temp instanceof Switch) {
         ((Switch) temp).changeState();
      }
   }
}

Как мне избежать использования instanceof и downcasting в моем методе changeSwitch? Я слышал о правиле «говори, не спрашивай», но очень неправильно писать метод в Track, который просто вызывает исключение. (Я намеренно пропустил модификаторы для упрощения)

1 Ответ

0 голосов
/ 08 марта 2020

Ну, вам не нужно создавать метод в Track, который выдает исключение. Вы можете создать метод, который ничего не делает. Затем вы можете просто вызвать changeState для каждого трека в IDMap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...