2012-01-17 3 views
7

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

Извините, если это простой вопрос, однако я искал информацию в Интернете и не имел большой удачи.

+2

Даже java.lang.Exception (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Exception.html) имеет конструктор со String. – anubhava

ответ

9

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

21

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

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

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

public Throwable(String message) { 
    ... 
} 

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

2

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

try { 
    my code that throws E; 
} catch (final E e) { 
    throw new MyE("my message", e); 
} 
1

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

бросить новый Exception ("сообщение")/Exception ("сообщение", InnerException);

1

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

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

7

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

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; 
    } 

} 
0

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

 try{ 
      throw new Exception("Bad String"); 
     }catch(Exception ex){ 
      System.out.println(ex.getMessage()); 
     }