2016-07-20 32 views
-1

私は2クラスのプロジェクトを持っています。 1つのObjectクラスと1つのGUIクラス。 エラーが発生した場合、自分で宣言された例外をスローしたいと思います。 私は二つの方法があります:Java再スロー例外

public class getValueClass { 

private List<Value> liste; 


public List<Value> getValues() { 

    try { 
     liste = this.getVal(); 
    } catch (ValueException ex) { 
     System.out.println("EXCEPTION!! " + ex.getMessage()); 
     ex.printStackTrace(); 
    } 
    return liste; 
} 


public List<Value> getVal() throws ValueException 
{ 
liste = null; 
try { 

    // initialize list 
    // do some stuff 


    //test exception 
    if(1 == 1) 
    { 
     throw new Exception(); 
    } 


} catch (Exception ex) { 
    throw new ValueException("QWE " + ex); 
} 
return liste; 

} 
} 

今、例外がスローされ、私は私のGetValuesメソッドで例外をキャッチし、メッセージ/スタック

を印刷しかし、私は私のGUIクラスおよびIでメソッドでgetValues呼び出しますそこにExceptionをキャッチして、私のダイアログにいくつかの情報を表示したい!

GUI:

public void myMethod() 
{ 
try 
      { 

      l = cs.getValues(); 

      } 
      catch(Exception ex) 
      { 
       System.out.println("TEST " + ex.getMessage()); 
      } 
      } 

しかし、私はすでにでgetValues()メソッドでそれをキャッチするので、私はそこに得ることはありません。

getValues()メソッドのメソッド宣言でスローを追加することなく、このようにすることはできますか? (インターフェイスからこのメソッドを取得しても変更されません)

+0

メソッドシグネチャで宣言されていないと、 'RuntimeException'から継承する例外をスローすることができます。それは、私は悪い練習を宣告されていない例外と考えていると述べた – Siguza

+0

@シグザシェ!私はその意見で一人暮らしだと思った: – Jeeter

+1

http://stackoverflow.com/questions/27578/when-to-choose-checked-and-unchecked-exceptions – jaco0646

答えて

2

IllegalArgumentExceptionやカスタマイズされたRuntimeExceptionサブクラスなどのチェックされていないRuntimeExceptionをスローする可能性があります。

public List<Value> getValues() { 
    try { 
     liste = this.getVal(); 
    } catch (ValueException ex) { 
     throw new IllegalArgumentException(ex.getMessage(), ex); 
    } 
    return liste; 
} 
+0

約10秒で私にそれを打つ;) – Jeeter

1

は、あなたが欲しいものを行うための方法がありますが、それはあなたがValueExceptionを延ばすことができます

将来のバグの原因になる可能性があるので、私は、ValueExceptionのあなたの目的に応じてを反対助言しますRuntimeException。名前の通り、RuntimeExceptionの例外のセットは、実行時にスローされ、コンパイル時には宣言されず、明示的にキャッチする必要があります。この方法で、メソッドにthrows宣言を追加する必要はありませんが、それでもあなたのメインメソッドでそれをキャッチします。


免責事項説明:彼らは、明示的に探されるまでキャッチされないだから

私はこのアイデア(と一般的にはRuntimeException秒)のファンではない理由があります。これは私の考えでは使いやすいコードではなく、使い勝手の良いコードではありませんが、不確実性のために使用していると感じません。

また、これは私の意見ですが、 Javaのものではない

関連する問題