2012-01-17 27 views
7

我想設置一個自定義異常消息,但我不確定如何做到這一點。我需要創建一個自定義的異常類還是有更簡單的方法來做到這一點?如何在JAVA中設置異常消息?

對不起,如果這是一個簡單的問題,但我一直在網上尋找,並沒有太多的運氣。

+2

即使java.lang.Exception的(http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Exception.html )有一個帶String的構造函數。 – anubhava 2012-01-17 13:10:24

回答

9

那麼,如果API提供了一個適合您需要的異常(例如IllegalArgumentException),那就使用它並在構造函數中傳遞消息。

21

大多數標準的異常類提供一個構造函數一個mesage,例如:

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的)需要一個消息作爲一個參數在其構造

擲新的異常( 「消息」)/異常( 「信息」,的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()); 
     }