Лучший шаблон проектирования, чтобы избежать instanceof при работе с классами, которые нельзя изменить? - PullRequest
0 голосов
/ 04 июля 2018

Я переопределяю метод, предоставленный сторонним классом библиотеки, и пытаюсь записать возникающие исключения:

@Override
someJavaMethod(arg1, arg2, Exception ex){
        //Declare some variables with default values
    if (ex instanceof SpecificException1)
        //Set values for the variables
    else if (ex instanceof SpecificException2)
        //Set some other values for the variables
    else
        //Do nothing
}

Проблема в том, что SpecificException1 и SpecificException2 являются сторонними исключениями, и я не могу их изменить.

Я понимаю, что использование instanceof не лучший способ справиться с этим. Какой шаблон проектирования / принципы ОО мне следует использовать для этого?

(Кроме того, мне посоветовали увидеть шаблон проектирования посетителя и ациклического посетителя, но я не уверен, что его можно применять к классам, которые нельзя изменить)

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Как насчет того, чтобы выбросить исключение в блок try-catch и использовать предложения catch, чтобы определить, какое это исключение?

0 голосов
/ 04 июля 2018

Нет принципиально разных способов решения этой проблемы (по крайней мере, в Java). Если бы вы использовали язык, который допускает множественную диспетчеризацию, вы могли бы перегрузить сообщение для разных типов исключений.

Я бы предпочел просто принять это. Если вообще, я бы посмотрел, как здесь помогают правила чистого кода, например, убедившись, что каждый блок if входит в отдельный метод.

Ну, есть один немного другой подход: вы могли бы потенциально использовать карту. Ключи будут классом исключения, значения будут что-то , которое содержит значения для ваших различных переменных, которые должны быть назначены.

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