2009-08-03 8 views
3

可能性の重複:
When to choose checked and unchecked exceptionsオンまたはオフ例外

こんにちは!

したがって、チェックされているかチェックされていない例外をスローするかについてはまだ心配しています。

class Correlation<T> 
{ 
    private final T object1, object2; 
    private final double correlationCoefficient; 

    public Correlation(T object1, T object2, double correlationCoefficient) 
    { 
     if(Math.abs(correlationCoefficient) > 1.0 || (object1.equals(object2) && correlationCoefficient != 1.0)) 
      throw new IllegalArgumentException(); 

     this.object1 = object1; 
     this.object2 = object2; 
     this.correlationCoefficient = correlationCoefficient; 
    } 
} 

ので、この場合には、私は簡単にユーザが通る状況から回復することはできませんので、実行時例外をスローしたい:私は他の人がこのケースで最も適切と思われるものを知っているしたいと思います悪いデータ。私は、渡されるデータを制御できないことを事前に指摘したいと思います。できれば、コンストラクタ内の条件が真であることを保証するインタフェースを作成します。しかし、これはすでに計算されている相関関係の便利なクラスなので、ユーザーが正確な情報を提供していると信じなければなりません。

あなたの意見が分かりましたら教えてください。私の意見で

+2

私はあなたに指示しますhttp://stackoverflow.com/questions/27578/when-to-choose-checked-and-unchecked-exceptions –

+0

パラメータがillegalであるため、IllegalArgumentException(実行時例外)の使用は有効です。 (コンストラクタの期待通りに(JavaDocsで文書化する必要があります))。 –

答えて

4

、答えは上ヒンジ:あなたは、発信者が正常に回復することができるように

  • 期待していますか?
  • このAPIは、公開または内部使用を目的としていますか?

誰かがチェック例外を使用しないでください。それは純粋に主観的です。

6

これは正しい応答だと思います。障壁のアサーション、つまり障壁のチェックを効果的に行っています。間違っていると、エンティティの作成を拒否しています。私はあなたがIllegalArgumentExceptionをスローすることができますが、それ以外の場合は正しいことをjavaドキュメントで文書化します。

Joshua Blockには、チェックされた例外と未チェックの例外に関する素晴らしい情報があります。基本的な前提は、誰かが例外をチェックすることを絶対に必要としない限り、チェックされていない例外をスローする必要があるということです。このように考えると、コーディングと戻り値が複雑になる可能性がありますが、一般に、よりクリーンで効率的なコードになります。例外的な場合に例外を使用すれば、よりうまくいくでしょう。

ちょうど私の2セントです。


編集

だけ明確にすることが、ここにあなたが持っている必要がありますJavaのドキュメントのようなものです:

/** 
* <Something describing constructor, and what it does, ending with a period.> 
* 
* @param parameter <Describe the parameter - do one for each parameter of the constructor, 
*  and note which values may be illegal for that particular parameter.> 
* @throws IllegalArgumentException <the case for the illegal argument exception.> 
2

常にあなたの例外で説明文を含める必要があります。この特定のケースではあなたも、2つのチェックを持って検討するかもしれない:

if(Math.abs(correlationCoefficient) > 1.0) 
      throw new IllegalArgumentException("abs(correlationCoefficient) > 1.0 - " + correlationCoefficient); 
    if((object1.equals(object2) && correlationCoefficient != 1.0)) 
      throw new IllegalArgumentException("object1==object2, but correlationCoefficient != 1.0, " + correlationCoefficient); 

これは、実際にコードを密接に見ることなく、正確な原因を特定することができるようにスタックトレースを見ることを得る人々することができます。特定の例外は、何が起こったのかわからないので、いくつかではなく、1つの条件によってのみトリガされるべきです。また、テストシナリオでエラーの状況を再現できない場合は、これが重要な場合があるため、必要な情報をすべて含めてください。

+0

はい、例外を説明する例外メッセージがあり、結果としてその結果の値が含まれています。 –

関連する問題