Как я могу установить сообщение об исключении в JAVA? - PullRequest
10 голосов
/ 17 января 2012

Я хочу установить пользовательское сообщение об исключении, однако я не уверен, как это сделать. Нужно ли создавать пользовательский класс исключений или есть более простой способ сделать это?

Извините, если это простой вопрос, однако я искал в интернете и мне не повезло.

Ответы [ 7 ]

26 голосов
/ 17 января 2012

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

public UnsupportedOperationException(String message) {
    super(message);
}

Приведенный выше класс просто вызывает конструктор своего родителя, который вызывает конструктор своего родителя и т. Д., В конечном итоге завершается:

public Throwable(String message) {
    ...
}

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

12 голосов
/ 12 ноября 2015

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

public class BusinessException extends RuntimeException{

    private Collection<String> messages;

    public BusinessException(String msg){
        super(msg);
    }


    public BusinessException(String msg, Exception cause){
        super(msg, cause);
    }


    public BusinessException(Collection<String> messages){
        super();
        this.messages= messages;
    }


    public BusinessException (Collection<String> messages, Exception cause){
        super(cause);
        this.messages= messages;
    }

    @Override
    public String getMessage(){
        String msg;

        if(this.messages!=null && !this.messages.isEmpty()){
            msg="[";

            for(String message : this.messages){
                msg+=message+",";
            }

            msg= StringUtils.removeEnd(msg, ",")+"]";

        }else msg= super.getMessage();

        return msg;
    }

}
11 голосов
/ 17 января 2012

Хорошо, если API предлагает исключение, которое соответствует вашим потребностям (например, IllegalArgumentException), просто используйте его и передайте сообщение в конструкторе.

2 голосов
/ 17 января 2012

Корневой Exception класс принимает пользовательское сообщение String, как и (насколько я могу судить) все производные классы.

Итак: нет, вам не нужно создавать собственный класс. Вероятно, одно из существующих исключений охватывает ваш случай (чтобы узнать, какое из них прочитайте их описание). Если ни один из них не является действительно удовлетворительным, вы можете создать расширение Exception (или RuntimeException и т. Д.) И поддерживать конструктор пользовательских сообщений.

2 голосов
/ 17 января 2012

Лучший подход - обернуть исключение.

try {
    my code that throws E;
} catch (final E e) {
    throw new MyE("my message", e);
}
1 голос
/ 30 сентября 2016

Попробуйте этот код

        try{
             throw new Exception("Bad String");
        }catch(Exception ex){
             System.out.println(ex.getMessage());
        }
1 голос
/ 17 января 2012

Класс Exception (его родитель, фактически - Throwable) принимает сообщение в качестве аргумента в своем конструкторе

выбросить новое исключение («сообщение») / исключение («сообщение», innerException);

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