Java 9で変更不可能なマップを作成するには?Map.of()とMap.ofEntries()の使い方
変更不可能なマップ(Unmodifiable Map)とは、一度インスタンスが生成されると、キーや値の追加・削除・更新が一切できないマップのことです。Java 9では、Mapインターフェースに追加された静的ファクトリメソッド「Map.of()」と「Map.ofEntries()」を使うことで、簡潔かつ安全に変更不可能なマップを作成できます。
これらのメソッドで作成されたマップには、以下のような特徴があります。
- ファクトリメソッドが返すマップは慣習的にイミュータブル(不変)です。キーや値を追加・削除・更新することはできず、変更用メソッドを呼び出すとUnsupportedOperationExceptionがスローされます。
- マップに格納されたキー/値そのものが可変(ミュータブル)である場合、マップの動作が不安定になったり、内容が変化して見えることがあります。
- イミュータブルなマップはnullのキーや値を許容しません。nullを使って作成しようとするとNullPointerExceptionがスローされます。
- 重複するキーは作成の時点で拒否されます。静的ファクトリメソッドに重複キーを渡すとIllegalArgumentExceptionがスローされます。
- すべてのキーと値がシリアライズ可能であれば、イミュータブルなマップもシリアライズ可能です。
- エントリの反復処理の順序は規定されておらず、変更される可能性があります。
構文
Map.of(k1, v1, k2, v2) Map.ofEntries(entry(k1, v1), entry(k2, v2), ...)
なお、Map.of()は最大10組のキーと値までしか受け付けません。それ以上のエントリを持つマップを作成したい場合は、Map.ofEntries()を使用します。
Map.of()の使用例
import java.util.Map;
public class UnmodifiableMapTest {
public static void main(String[] args) {
Map<String, String> empMap = Map.of("101", "Raja", "102", "Adithya", "103", "Jai", "104", "Chaitanya");
System.out.println("empMap - " + empMap);
empMap.put("105", "Vamsi"); // UnsupportedOperationExceptionがスローされる
}
}
実行結果
empMap - {104=Chaitanya, 103=Jai, 102=Adithya, 101=Raja}
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.ImmutableCollections.uoe(Unknown Source)
at java.base/java.util.ImmutableCollections$AbstractImmutableMap.put(Unknown Source)
at UnmodifiableMapTest.main(UnmodifiableMapTest.java:7)
このように、変更不可能なマップに対してput()などの変更操作を行おうとすると、コンパイルは通りますが実行時にUnsupportedOperationExceptionが発生します。
Map.ofEntries()の使用例
import java.util.Map;
import static java.util.Map.entry;
public class UnmodifiableMapTest {
public static void main(String[] args) {
Map<String, String> empMap = Map.ofEntries(
entry("101", "Raja"),
entry("102", "Adithya"),
entry("103", "Jai"),
entry("104", "Chaitanya")
);
System.out.println("empMap - " + empMap);
}
}
実行結果
empMap - {102=Adithya, 101=Raja, 104=Chaitanya, 103=Jai}
Map.ofEntries()はentry()メソッドで生成したエントリを引数として渡すため、エントリ数の制限を受けずに柔軟にマップを構築できます。読み取り専用の定数的なデータを扱いたい場合に、両メソッドは非常に便利です。
-
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: