2012-01-17 16 views
7

カスタム例外メッセージを設定したいのですが、これを行う方法がわかりません。カスタム例外クラスを作成する必要がありますか、これを行う簡単な方法はありますか?JAVAの例外でメッセージを設定するにはどうすればよいですか?

申し訳ありませんが、これは簡単な質問ですが、私はオンラインで見てきましたが、運があまりありませんでした。上記のクラスは、単に最終的に最高潮に達する、ように親のコンストラクタを呼び出し、その親のコンストラクタを呼び出し

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

+2

このコードを試してみてください)にはStringを持つコンストラクタがあります。 – anubhava

答えて

9

APIがあなたのニーズに合った例外(IllegalArgumentExceptionなど)を提供している場合は、それを使用してメッセージをコンストラクタで渡します。

21

ほとんどの標準的な例外クラスには、例えば、メッセージを指定を取るコンストラクタを提供する

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カスタムメッセージを受け入れます。

So:いいえ、カスタムクラスを作成する必要はありません。既存の例外のうちの1つが、おそらくあなたのケースをカバーしています(その説明を読んでどれを見つけるか)。これらのどれも本当に満足できるものでなければ、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

でものjava.lang.Exception(http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Exception.html

 try{ 
      throw new Exception("Bad String"); 
     }catch(Exception ex){ 
      System.out.println(ex.getMessage()); 
     } 
関連する問題