コレクションの不変コピー
1回の呼び出しでコレクションの不変コピーを作成する。
コード比較
✕ Java 8
List<String> copy =
Collections.unmodifiableList(
new ArrayList<>(original)
);
✓ Java 10+
List<String> copy =
List.copyOf(original);
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
スマートコピー
ソースがすでに不変の場合はコピーをスキップします。
1回の呼び出し
ArrayListの手動構築+ラッピングは不要です。
防御的コピー
元のコレクションへの変更はコピーに影響しません。
旧来のアプローチ
手動コピー+ラッピング
モダンなアプローチ
List.copyOf()
JDKバージョン
10
難易度
初級
JDKサポート
コレクションの不変コピー
利用可能
JDK 10(2018年3月)以降、広く利用可能
仕組み
List.copyOf()、Set.copyOf()、Map.copyOf()は既存のコレクションの不変スナップショットを作成します。ソースがすでに不変コレクションである場合、コピーは作成されません。
関連ドキュメント