web-dev-qa-db-ja.com

重要なパラメーター/依存関係が欠落している場合にスローする例外は何ですか?

この方法を取る

/**
 * @return List of group IDs the person belongs to
 *
 */
public List<String> getGroups() {
    if (this.getId().equals("")) return null;
}

Nullを返す代わりに例外をスローしたいのですが、重要なパラメータ/依存関係が設定されていないときにスローする例外は何ですか?

59
Pentium10

パラメーター/引数が外部から制御されている場合、 IllegalArgumentException 、または IllegalStateException メソッドが間違った瞬間(状態)に呼び出された場合。あなたの特定のケースでは、後者だと思います。 (疑わしい)選択肢は NullPointerException です。

ただし、ユーザーが理由を理解できるように、これは@throwsに明示的に文書化する必要があります。

87
BalusC
5
Stefan Kendall

IDが常に設定されていることを保証できない場合(たとえば、有効なIDが渡されたことを確認できる場所でコンストラクターに要求することにより)、スローする他の提案 IllegalStateException は正しい。ただし、可能な場合は、オブジェクトが最初にこの状態にならないようにしてください。

3
Sam Holder

Idは所有者の状態であるため、IllegalStateExceptionを使用します。 idがパラメーターとして渡された場合、IllegalArgumentExceptionが正しいでしょう。

3
Arne Burmeister

例外をスローする代わりに、空のリストを返すだけです。依存関係/パラメーターが満たされない場合、結果はありません。投稿されたコメントとコードから、それが予想される動作のように見えます。 idが空の場合、グループがアタッチされていないため、空のリストになります。

2
aephyx

例外を拡張して、独自の例外タイプを作成します。このようにして、関数を呼び出すと、その特定の例外をキャッチし、必要に応じて適切に処理できます。例外を拡張するものなら何でも同じことができますが、例外処理で非常に堅牢になるように、独自の例外クラスを作成することを好みます。もちろん、これはあなた次第です。

1
Jay