Возвратите в исключении Java содержимое строки, которая его вызвала - PullRequest
1 голос
/ 25 июня 2019

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

String error;
...
error= name;
String name = getValue("name");
error= surname;
String surname = getValue("surname");

......

catch(Exception){
return error;
}

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Да, это ужасная идея.

Вы сохраняете "name" в переменную error перед чтением свойства. Вы понятия не имеете, будет ли свойство читаться, но переменная была установлена ​​независимо от чтения. Если каждое свойство было успешно проанализировано, на что мы и надеемся, переменная error по-прежнему будет иметь какое-либо имя свойства.

В таких сценариях мы обычно помещаем эту информацию в экземпляр исключения. Когда мы находимся в блокирующем блоке, мы можем получить доступ к этой информации и действовать соответственно.

public String getValue(String propertyName) {
    try {
        tryToReadProperty(propertyName);
    } catch (Exception e) {
        // something wrong happened
        throw new IllegalArgumentException(propertyName);
    }
}

...

try {
    String name = getValue("name");
    String surname = getValue("surname");
} catch (IllegalArgumentException e){
    String error = e.getMessage();
}

Для простоты я использовал IllegalArgumentException, его следует заменить на более значимый тип исключения, специфичный для предметной области.

return error;

Мы редко делаем это. Вместо этого мы распространяем исключение или перебрасываем другое исключение, определяемое уровнем.

0 голосов
/ 25 июня 2019

См. Шаблон уведомления Мартина Фаулера.

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