【Java 9】List.of()メソッドで変更不可能(イミュータブル)なリストを作成する方法
変更不可能なリストとは?
変更不可能(unmodifiable)なリストとは、一度インスタンスを作成すると、その後は要素の追加・削除・置き換えが一切できないリストのことです。Java 9では、静的ファクトリメソッドList.of()を使用することで、このようなリストを簡潔かつ安全に作成できます。
従来のようにCollections.unmodifiableList()で既存リストをラップする方法もありますが、List.of()なら1行で直接イミュータブルなリストを生成できるため、より読みやすく効率的なコードになります。
List.of()で作成したリストの主な特徴
- 事実上イミュータブル:ファクトリメソッドが返すリストは不変(immutable)であり、要素の追加・削除・置き換えはできません。変更用(ミューテーター)メソッドを呼び出すとUnsupportedOperationExceptionがスローされます。
- 可変要素への注意:リストに格納された要素自体が可変(mutable)オブジェクトの場合、リストの内容が変化しているように見えることがあります。
- null要素は許可されない:静的ファクトリメソッドで作成するイミュータブルなリストはnull要素を許容しません。nullを含めて作成しようとするとNullPointerExceptionがスローされます。
- 直列化に対応:すべての要素が直列化可能(serializable)であれば、リスト全体も直列化可能です。
- 要素の順序が保持される:リスト内の要素の順序は、引数として渡した順序、または指定した配列内の要素の順序と同一になります。
構文
List.of(E... elements)
コード例
import java.util.List;
public class UnmodifiedListTest {
public static void main(String[] args) {
List<String> countries = List.of("India", "Australia", "England", "Newzealand");
System.out.println("Countries - " + countries);
countries.add("Srilanka"); // UnsupportedOperationExceptionがスローされる
}
}実行結果
Countries - [India, Australia, England, Newzealand]
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.ImmutableCollections.uoe(Unknown Source)
at java.base/java.util.ImmutableCollections$AbstractImmutableList.add(Unknown Source)
at UnmodifiedListTest.main(UnmodifiedListTest.java:7)まとめ
Java 9以降で変更不可能なリストが必要な場合は、List.of()を使うのが最もシンプルな方法です。コンパイル時に意図しない変更を防ぎたい場面や、定数リストを定義したい場面で特に有効です。ただし、null要素を扱いたい場合や、既存の可変リストから不変ビューを作りたい場合は、Collections.unmodifiableList()など別の手段を検討しましょう。
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー
-
Javaでログインフォームを作成する方法!Swingを使った実装例とサンプルコード
JavaではSwingというGUIツールキットを利用することで、デスクトップアプリケーション向けのログインフォームを簡単に開発できます。この記事では、ユーザー名(User Name)とパスワード(Password)の2つのラベル、認証情報を入力するための2つのテキストフィールド、そしてSUBMIT(送信)ボタンを1つ備えたフォームを作成します。正しい認証情報が入力されると、フォーム上に「Hello admin」というメッセージが表示されます。 使用する主なコンポーネント JLabel:ラベルの表示に使用します。 JTextField:ユーザー名の入力欄です。 JPasswordField: