Исключения Java: должно ли исключение содержать свое сообщение внутри или принимать его как параметр
Всякий раз, когда мне нужно определить пользовательское исключение, если его сообщение не изменится в зависимости от контекста, я помещаю сообщение в это исключение. Как это:
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException() {
super("User with given name is not found!");
}
}
Вместо этого:
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
Поэтому мне не нужно предоставлять сообщение каждый раз, когда я выкидываю это исключение, я знаю, что сообщение должно быть одинаковым во всех местах.
Как вы думаете, есть проблема в моем подходе? Какой из них вы бы предпочли и почему?
2 ответа
Почему бы не разрешить доставку сообщения, но указать значение по умолчанию.
public class UserNotFoundException extends RuntimeException {
private static final String DEFAULT_MESSAGE = "User with given name is not found!";
public UserNotFoundException() {
this(DEFAULT_MESSAGE);
}
public UserNotFoundException(String message) {
super(message);
}
}
Я думаю, что это будет иметь смысл только для вас, чтобы использовать
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException() {
super("User with given name is not found!");
}
}
Если и только если вы используете, выдает это исключение, когда пользователь с данным именем не найден. Но это не правильный подход. Взять, к примеру, если исходный код Java написал такой жестко закодированный код. Вы не сможете даже определить свое собственное сообщение. Лучшие практики будут вторым подходом
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
так что вы или любой другой программист, который хотел бы расширить ваш код, может повторно использовать ваше пользовательское исключение. ПОМНИТЕ, что возможность повторного использования - одна из основных особенностей ООП. Любая практика, которая противоречит этому, не очень хорошая практика.