Исключения 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);
    }
}

так что вы или любой другой программист, который хотел бы расширить ваш код, может повторно использовать ваше пользовательское исключение. ПОМНИТЕ, что возможность повторного использования - одна из основных особенностей ООП. Любая практика, которая противоречит этому, не очень хорошая практика.

Другие вопросы по тегам