У меня есть класс модели домена, у которого есть реализация toString, которая выглядит следующим образом:
public String toString() {
try {
return getX() + "\n"
getY() + "\n"
getZ(); //etc.
} catch(Exception e) {
throw new RuntimeException(e);
}
}
Методы getX()
, getY()
и getZ()
не являются простыми геттерами, они могут выполнять поиск в фоновом режиме, как правило, поиск статической карты предопределенных пар ключ-значение. У некоторых из них в подписи было throws SomeCheckedException
.
У меня сложилось впечатление, что это плохая практика и "кодовый запах". Тот факт, что toString()
даже нуждается в этой проверке, является для меня признаком плохого дизайна. Но коллега спросил меня, что именно не так с перехватом общего Exception
в toString()
, так как перехваченный Exception
распространяется дальше.
Я полагаю, что это нарушает, по крайней мере, принцип KISS, поскольку простой метод, такой как toString()
, здесь обозначен как требующий специальной обработки исключений.
Итак, пахнет ли код, чтобы иметь универсальный блок в toString ()?
Ответы, которые я нашел, были либо для общего сценария перехвата универсального Exception
, и я согласен с большинством из них, что если вы используете универсальный механизм обработки ошибок или пакет, тогда ожидается, что он будет работать с универсальными исключениями. Этот аргумент был неубедительным в нашей дискуссии, поэтому мне любопытны другие мнения.