List#contains(null)は使わないほうが良い
   1 min read

List(などのコレクション)が要素に null を含むかどうかの判定に、 contains(null) を利用すると NullPointerException が発生することがあります。

リファレンスには次のようにあります:

NullPointerException - 指定された要素が null で、このリストが null 要素を許可しない場合(オプション)

オプション、とあるが、そういう型は実際に存在するのか、というと、Java9から導入された List.of() メソッドで生成される インスタンス(変更不能なリスト)がそれです。 簡単に試せます:

List<String> list = List.of("hello");
list.contains(null);

代わりに、例えば次のようなコードで実現できます:

list.stream().anyMatch(Objects::isNull);

ただし、lambdaを使うとオーバヘッドがあるため、Spring Framework内部では利用しない方針のようで、Springプロジェクトでは CollectionUtils.contains() というユーティリティメソッドが用意されていました。これを使うと次のようになります:

CollectionUtils.contains(list.iterator(), null);

関連リンク: