異なった空のコレクションとヌル値を処理するためにあなたのコードを設計するのは良いか悪い習慣ですか?

セルバン:

私は更新されてしまったに取り組んでいる、といくつかの点で、誰かが空のコレクションを送信する代わりに開始したプロジェクトの一環nullメソッドに引数として。

そして、これは変更することが私を導いた最初のシングルのバグ、につながったif (null == myCollection)if (CollectionUtils.isEmpty(myCollection))最後にいくつかのバグのカスケードにつながりました。このように、私は多くのコードが異なっこれらのコレクションを扱うことを発見しました:

  • コレクションが空になったとき(つまり、ユーザーは、特にありませんしたかったものをここに)
  • コレクションがあるときnull(つまり、ユーザーがここには何も言及しませんでした)

そこで、私の質問は:この良いか悪いデザインの練習ですか?

ヴィンセントパッサウ

彼の(非常に良い)の本の中で効果的なJavaの、ジョシュア・ブロックは、(あなたの質問のような「一般的」ではない)メソッドの戻り値のため、この質問を扱います。

ヌルの使用についてクライアントを書くプログラマがnullのリターンを処理するための特殊なケースのコードを書くのを忘れかもしれないので)それは、errorproneです。

(...)

時にはそれが配列を割り当てる費用を回避するため、NULL戻り値は空の​​配列に好適であると主張されています。この引数は、2つのカウントに失敗します。プロファイリングは、当該方法は、パフォーマンスの問題(項目55)への真の貢献者であることを示していない限り、まず、それはこのレベルのパフォーマンスを心配するお勧めできません。第二に、商品を返さない長さゼロの配列が不変と不変オブジェクトであるため、自由(項目15)を共有することができるすべての呼び出しから同じ長さゼロの配列を返すことが可能です。

(...)

要約すると、これまでの代わりに空の配列またはコレクションを返すarray-またはコレクション値メソッドからヌルを返すする理由はありません。(...)

Personnally私は自分のコード内のコレクションのいずれかを使用して経験則として、この推論を使用しています。もちろん、ヌルと空の理にかなっの区別が、私の経験では、それは非常にまれだいくつかの場合があります。

リターンはその指定する代わりに空のヌルという方法の場合には、コメント欄にBionicCodeで述べたようにもかかわらず、何かが間違っていた、あなたは常に代わりに例外をスローする可能性があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=177250&siteId=1