変更不可能な java.util.Collections コレクションの呼び出しで、より新しいコレクションのファクトリメソッドに変換できるものを報告します。 このような呼び出しは、Java 9 で導入された List.of()Set.of()、もしくは Java 10 で導入された List.copyOf() などに置換できます。

Java 9 コレクションのファクトリメソッドは、java.util.Collections のメソッドと以下の点で異なります。

これらのケースに違反している場合、例外がスローされます。 そのため、移行後にコードのセマンティクスが変更される場合があります。

例:


  List<Integer> even = Collections.unmodifiableList(
    Arrays.asList(2, 4, 6, 8, 10, 2));
  List<Integer> evenCopy = Collections.unmodifiableList(
    new ArrayList<>(list1));

クイックフィックス適用後:


  List<Integer> even = List.of(2, 4, 6, 8, 10, 2);
  List<Integer> evenCopy = List.copyOf(list);

指定されている引数がコンパイル時定数である場合にのみ報告する場合は、「内容が定数でない場合に警告しない」オプションを使用します。 これにより、動作が変わる可能性が低くなります。元の要素が一意であり、かつ null ではないということを静的に確認できるとは限らないためです。

10 個以上のエントリを持つ変更不可能なマップを Map.ofEntries() に置換することを提案するには、「'Map.ofEntries()' の提案」オプションを使用します。

2017.2 の新機能です