Java
 Computer >> コンピューター >  >> プログラミング >> Java

【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()など別の手段を検討しましょう。

  1. JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説

    JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー

  2. Javaでログインフォームを作成する方法!Swingを使った実装例とサンプルコード

    JavaではSwingというGUIツールキットを利用することで、デスクトップアプリケーション向けのログインフォームを簡単に開発できます。この記事では、ユーザー名(User Name)とパスワード(Password)の2つのラベル、認証情報を入力するための2つのテキストフィールド、そしてSUBMIT(送信)ボタンを1つ備えたフォームを作成します。正しい認証情報が入力されると、フォーム上に「Hello admin」というメッセージが表示されます。 使用する主なコンポーネント JLabel:ラベルの表示に使用します。 JTextField:ユーザー名の入力欄です。 JPasswordField: