Задать вопрос

Стоит ли использовать instanceof, если в JTree несколько разных объектов?

В моем JTree дереве существует несколько разных видов объектов (6 штук).
Для работы разных объектов нужны совершенно разные методы.
У каждого класса около десятка своих полей.
<code lang="java">
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getModel().getChild(currentNode, i);
    Object ob = node.getUserObject();
    if(ob instanceof DescriptionTemplate) {
        // todo...
    }
</code>

Насколько оправдано использование использование оператора instanceof в этом случае?
При использовании instanceof образуется большое количество ветвлений.

Можно ли решить эту проблему другим способом?
  • Вопрос задан
  • 2839 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
  • Академия Эдюсон
    Java-разработчик: тариф Базовый
    8 месяцев
    Далее
  • Skillbox
    Профессия Java-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Losted
@Losted
Software Architect
Как насчет общего интерфейса с методом getType()?
Ответ написан
@paralainer
Не стоит забывать про возможность использования стратегий.

Очень приблизительный код, но суть ясна:
private static final Map<Class, Action> strategies = new HashMap<>();
    
    private static interface Action {
         void doAction(Params params);
    }
    
    static {
        strategies.put(ANodeType.class, new Action() {
            public void doAction(Params params){
                 ...
            } 
        });

        strategies.put(BNodeType.class, new Action() {
            public void doAction(Params params){
                 ...
            } 
        });
    }
    
    ...
    
    public void handleTreeNode(Object node, Params params){
       strategies.get(node.getClass()).doAction(params);
    }


А вообще есть вариант реализовать всеми типами нод интерфейс Action (переименовав его, например, в JTreeNode) и выглядеть это будет примерно так:

public void handleTreeNode(JTreeNode node, Params params){
       node.doAction(params);
    }


Но тут нужно смотреть возможно ли изменить код классов, которые хранятся в дереве и насколько это будет архитектурно правильно. (Специальные ли это объекты для дерева или общие объекты системы)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Казань
от 75 000 ₽
ИТРУМ Ростов-на-Дону
от 75 000 ₽
СофтМоушен Санкт-Петербург
от 150 000 до 220 000 ₽