47

要約はほとんどそれをすべて言います。の関連するコード スニペットを次に示しますImmutableList.createFromIterable()

  if (element == null) {
    throw new NullPointerException("at index " + index);
  }

私はこれに何度か遭遇しましたが、汎用ライブラリ関数がこの制限を課す理由がわかりません。

編集1:「汎用」で、95%のケースに満足しています。しかし、私はまだ 100 回の呼び出しを書いたとは思いませんImmutableList.of()。多分私は異常者です。:)

編集 2: 私の大きな不満は、標準java.utilコレクションを操作するときに「しゃっくり」が発生することだと思います。トークで指摘したようにnull、コレクション内の s に関する問題は、null が挿入された場所から遠く離れた場所で発生する可能性があります。しかし、一方の端で標準コレクションに null を配置し、もう一方の端で適切に処理するコードの長いチェーンがある場合、途中のどの時点でも Google コレクション クラスを置き換えることができません。を投げますNullPointerException

4

4 に答える 4

38

これについては、このビデオの 25 分の時点で説明しました: https://youtu.be/ZeO_J2OcHYM?t=1495

怠惰な答えで申し訳ありませんが、これは結局のところ「なぜ」の質問にすぎません (おそらく、StackOverflow には適切ではありませんか?)。

編集:ここで、ビデオで明確にしたかどうかわからない別のポイントがあります: 合計 (世界中のすべての Java コードにわたる)、古いスタンバイを使用するためにこれらの null に適したケースのために作成する必要がある追加のコードの量Collections.unmodifiableList(Arrays.asList(...))など.checkArgument(!foos.contains(null))コレクションがあなたのためにそれを処理しなかった場合、誰もが追加する必要がある余分な呼び出しの合計 (世界中のすべての Java コードにわたる) に圧倒されます。ほとんどの場合、コレクションの使用法では null が存在することは想定されていません。

于 2010-02-12T17:12:05.937 に答える
11

一般に、Google Collections の開発者は、null が想定される汎用パラメータであるべきだとは考えていないグループです。

于 2010-02-12T14:45:06.033 に答える
0

Guava の Github ページから

null を不注意に使用すると、驚くほどさまざまなバグが発生する可能性があります。Google のコード ベースを調べたところ、コレクションの 95% ほどは null 値を持たないことが想定されており、null を黙って受け入れるのではなく、すばやく失敗させることが開発者にとって有益であることがわかりました。

nullGuava の主な立場は、コレクションで sを回避する他の方法があるということです。たとえば、特定のキーを使用してアイテムのバッチをフェッチします。例えば

// If a widget for the given id does not exist, return `null` in the list
private List<Widget> getWidgets(List<String> widgetIds);

// Could be restructured to use a Map type like this and avoids nulls completely.

// If a widget for the given id does not exist, no entry in list
private Map<String, Widget> getWidgets(List<String> widgetIds);
于 2021-06-23T04:14:09.240 に答える
-2

理由の 1 つは、リストで機能する関数がすべての要素の Null をチェックする必要がなくなり、パフォーマンスが大幅に向上することです。

于 2010-02-12T14:08:25.633 に答える