0

getById(Long id)ID に基づいてエンティティを返すサービス メソッドがあるとします。ID が null の場合の適切なアクションは何ですか?

IllegalArgumentException をスローしますか?

NullPointerException をスローしますか? (guavas Preconditions.checkNotNull がこれを行います)

nullを返す?

id == null のエンティティはあり得ないので、null を返すことはそれほど悪くないように思えますか? ID が存在しない場合、メソッドはとにかく null を返します。

前提条件はワンライナーですが、この場合 NullPointerException をスローするのは極端に思えます。

ここでの「ベストプラクティス」は何ですか?

4

3 に答える 3

2

このようなメソッドに null を渡すと、バグを示します。そのようなものは存在できないため、null ID を持つエンティティを見つけたいと思う人はいません。したがって、これはおそらく、UI レイヤーでバインドの問題が発生したか、呼び出し元が非表示の ID フィールドをフォームに追加するのを忘れたことなどを意味します。

null を返すと、バグが隠されるか、よりあいまいになります。例外をスローすると、バグが早期に発見され、明確なエラー メッセージが表示されるため、バグを早期に修正でき、アプリケーションが最終的により堅牢になります。

null 非許容の引数が null である場合の規則は、NullPointerException をスローすることです。それが私がすることです。

于 2013-03-16T09:09:28.743 に答える
1

idofのレコードがないnullため、メソッドは、レコードがない「有効」が指定された場合に何をする必要がidあります。それが最小の驚きの原則です。消費者は、見つからない場合に対応するようにコーディングされているため、カバーする必要があります。

idまだ永続化されていない新しいレコードとは何ですか? それが起こった場合、それはあなたの行動を逸脱させる可能性がありますnull

于 2013-03-16T09:08:31.240 に答える
0

NullPointerExceptionEntity Collection の ID の値が見つからないため、常に使用することをお勧めします。

于 2013-03-16T09:02:32.423 に答える