Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách tạo unmodifiable Map trong Java 9

Unmodifiable Map (Map không thể sửa đổi) là map mà khóa (keys) và giá trị (values) không thể thêm, xóa hoặc cập nhật sau khi instance unmodifiable được tạo. Các phương thức factory tĩnh: Map.of() và Map.ofEntries() từ Map cung cấp cách thuận tiện tạo unmodifiable maps trong Java 9.

Instance map tạo bằng Map.of() và Map.ofEntries() có đặc điểm:

  • Map trả về theo quy ước immutable (bất biến). Keys và values không thể thêm, xóa, cập nhật. Gọi bất kỳ phương thức mutator nào trên map gây UnsupportedOperationException.
  • Nếu keys/values chứa trong map tự thân mutable, có thể khiến Map hành xử không nhất quán hoặc nội dung xuất hiện thay đổi.
  • Immutable map không cho phép null keys và values. Cố tạo với null keys/values ném NullPointerException.
  • Duplicate keys bị từ chối ngay khi tạo. Truyền duplicate keys cho factory method gây IllegalArgumentException.
  • Immutable maps có thể serialize nếu tất cả keys và values đều serializable.
  • Thứ tự lặp mappings không xác định (unspecified) và có thể thay đổi.

Cú pháp

Map.of(k1, v1, k2, v2)
Map.ofEntries(entry(k1, v1), entry(k2, v2),...)

Ví dụ 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"); // throws UnsupportedOperationException
    }
}

Kết quả

empMap - {104=Chaitanya, 103=Jai, 102=Adithya, 101=Raja}
Exception in thread "main" java.lang.UnsupportedOperationException

Ví dụ Map.ofEntries()

import java.util.Map;
import static java.util.Map.entry;

public class UnmodifidMapTest {
    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);
    }
}

Kết quả

empMap - {102=Adithya, 101=Raja, 104=Chaitanya, 103=Jai}