機能があるとしましょう
private RuntimeException foo() {
return new RuntimeException();
}
例外はスローされず、次のように処理できます
throw foo();
または戻り値を変数に割り当てることができます
RuntimeException e = foo();
ただし、関数は次のように変更できます。
private RuntimeException foo() {
throw new RuntimeException();
}
そして、それでもコンパイルされ、前の例のように使用することができます。または、同様に呼び出すことができfoo();
、例外がスローされます。
しかし、なぜそれをRuntimeException
返さずに代わりにスローするメソッドの戻り型として指定できるのですか?この場合、スロー動作とリターン動作の間に関係はありますか?
Exception
(またはより一般的にはThrowable
)戻り値の型を持っていると、if / elseステートメントのようなすべての決定分岐で確実にスロー/戻りされることに気付きました。しかし、これのより実用的な使用法または推奨されるものはありますか?
のでthrow
、すぐに方法ストップの実行を行いますと、制御は呼び出し元に渡され、それがどのようなあなたのメソッドの戻りが重要ではありません。あなたが返す入力する内容は関係ありませんが、そのタイプはなりません、あなたが最初の行に(起こった何か間違ったことを示す)例外をスローしているため、返されます。
例外をスローすると、引数が無効である、引数がnullであるなどの問題が発生したため、コンパイラーはこれを許可します。このようなエラー条件では、コンパイラはメソッドが値を正常に返すことを期待していません。明らかに問題が発生した場合、メソッドは計算しようとしていたものを何も計算できないため、それは理にかなっています。
したがって、「すべてのコードパスは値を返す必要がある」というフレーズは、実際には「すべてのコードパスが値を返すか、またはスローする必要がある」と言う必要がありThrowable
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加