0

ユーザーは、特定のセットからIDを選択するように求められます。そのIDがコレクションに存在するかどうかを確認します。存在しない場合は、IndexOutOfBoundsException後でスローしてキャッチします。そのような目的で実際にその例外を使用できますか、それとも非常に悪い習慣ですか?

4

5 に答える 5

2

がパラメータIDとしてメソッドに渡され、事前事後条件の一部としてそれをチェックしたい場合は、IllegalArgumentExceptionまたはをスローできますRuntimeException
IndexOutOfBoundsここでは混乱するため、意味がありません。範囲外のアクセスを行うと発生する例外です

于 2012-09-03T21:06:01.067 に答える
1

個人的には、チェックされた例外をスローするので、呼び出し元のメソッドはそれをキャッチするように強制されます。あなたにできることは

initCause

例外について、これをIllegalArgumentExceptionとして設定します

例えば

public method(int i) throws MyException {
    if (i < 0) {
       MyException e = new MyException();
       e.initCause(new IllegalArugmentException());
       throw e;
    }
}

私はおそらく、例外がスローされたときに何が起こったのかが明らかであるというメッセージを渡すために正しいcorectorsを呼び出すでしょう。

于 2012-09-03T21:10:38.740 に答える
1

本当に例外的な状況に直面している場合、例外をスローすることは本当に意味があります

クラスのコントラクトが、ユーザーがコレクションにない値をクエリしないと想定している場合、例外は適切です。おそらくIllegalArgumentExceptionまたはこのようなものです。

そうしないと、ボイラープレートコードが発生し、スタックの巻き戻しや例外の伝播が原因でパフォーマンスが大幅に低下することがあります。

したがって、例外をスローするか、事前定義された値を返すかは、一種のトレードオフです。

あなたの場合は「null」を返すことをお勧めします。

于 2012-09-03T21:06:25.650 に答える
0

コンテキストによって異なりますが、IMOは、位置参照に関連付けられていない概念であるIDを検索している場合、その特定の例外(おそらく、アプリ固有のItemNotFoundまたは同等のもの)の悪用になります。

APIに、有効なオブジェクトを返すか例外をスローすることを指定するコントラクトがある場合は、例外をスローします。意味がある場合は、代わりにNullObjectパターンも検討してください。

于 2012-09-03T21:07:16.920 に答える
0

呼び出しが機能し23、呼び出しが機能し47、その間に何も変更されていない場合、それが機能しない理由は35、インデックスが範囲外であったことではありません。

于 2012-09-03T21:08:59.350 に答える