2011-08-28 12 views
19

私は、成功した場合にtrueを返すと主張するAPIを使用しており、失敗した場合はfalseを返します。しかし、失敗した場合には、別の例外をスローすると主張しています。どのようにfalseを返して例外をスローすることができますか?値を返し、例外をスローしますか?

答えて

25

例外をスローして単一の関数呼び出しから値を返すことはできません。

おそらく、エラーがある場合はfalseを返しますが、入力が無効な場合は例外をスローします。

編集:PaulPROは、それが現在の1に値を戻しながら例外は、別のスレッドでスローされる原因と技術的にことが可能であることを指摘(今は削除された)の回答を掲載しました。私はこれが注目に値すると思っていました。たとえそれがあなたが今見なければならないものではないとしても。

+0

私は何を考えましたか?私は最終的にブロックでいくつかのトリックがあるかもしれないと思った。 – mark

+0

例外がスローされるとプログラムの実行が停止するので、両方を行うことは不可能です。あなたがtryブロックにreturn文を持っていれば、プログラムはまだfinalブロックを渡しますか?なぜなら、tryブロック内の値を返して、最後のブロックに例外をスローするとどちらもやりました。 –

+2

@ Karel-Jan Misseghers:いいえ、あなたのプログラムで**例外的に**例外がスローされたら実行を停止します。あなたは、Java例外がどのように機能するのか混乱しており、明らかにマルチスレッドのJavaプログラミングをまだ行っていません。チェックされていない例外が別のスレッドで発生すると、多くのスレッドをうまく動作させることができます。死に至るスレッドが自動的に再起動されるケースがたくさんあります(最も有名なのは、OS/JVMによってはSwingのEDTです:EDTが消滅した場合、新しいEDTが再起動されます)。 – SyntaxT3rr0r

14

あなたは(この場合はブールで)価値があるという例外をスローすることができます:例外と値を導出することができるような方法であなたのコードを記述することは可能ですが

public class ValueException extends Exception { 
    final boolean value; 

    public ValueException(boolean value, String message) { 
     super(message); 
     this.value = value; 
    } 

    public boolean getValue() { 
     return value; 
    } 
} 
0

を関数呼び出し(上の記事を参照)から、それは決して適切なコーディングで行われるべきではありません。

このAPIのドキュメントへのリンクをご覧ください。 APIは明快さを優先する必要があります。例外をスローして値を返すと、返された値が安全かどうか、または無効であるかどうかが問われます。

try/catchブロックは、例外を処理するその他の方法です。彼らは例外を呼び出したメソッドに渡すのではなく、開発者が適切と考える方法で内部的に処理します。

例外の場合にデバッグのために結果の値を表示する必要がある場合は、ボヘミアンの考えがうまく機能します。