📜  在Java 9 中创建不可变 Map 的工厂方法

📅  最后修改于: 2022-05-13 01:54:44.420000             🧑  作者: Mango

在Java 9 中创建不可变 Map 的工厂方法

在Java 9 中, Java语言中添加了一些特性,不可变映射的工厂方法就是其中之一。
不可变映射的特点:

  • 顾名思义,这些地图是不可变的。
  • 如果尝试在地图中添加、删除和更新元素,我们将遇到 UnsupportedOperationException。
  • 不可变映射也不允许空元素。
  • 如果尝试使用 null 元素创建不可变映射,我们将遇到 NullPointerException。如果尝试在地图中添加空元素,我们将遇到 UnsupportedOperationException。

在Java 8 中创建不可变映射

要在Java 8 中创建不可变地图,我们使用Java.util.unmodifiableMap(Map map) 方法。 unmodifiableMap(Map map):此方法返回指定地图的不可修改视图。此方法允许模块为用户提供对内部地图的“只读”访问权限。

Syntax: public static  Map unmodifiableMap(Map map)
Returns: an unmodifiable view of the specified map.
Exception: NA

不可变空和非空映射的Java代码:

// Java code illustrating immutable map in java 8
import java.util.*;
class ImmutableListDemo
{
    public static void main(String args[])
    {
        // empty map
        Map empty = new HashMap();
        Map immutable1 = Collections.unmodifiableMap(empty);
           
        // non-empty map
        Map non_empty = new HashMap();
        non_empty.put(1, "ide");
           
        Map immutable2 = Collections.unmodifiableMap(non_empty);
           
        // adding key-value pair in these immutable map
        immutable1.put(1,"gfg");
        immutable2.put(2,"quiz");
              
    }
}

上面的代码会产生异常,因为我们试图在不可变 Map 中添加键值对。

Runtime Error : Exception in thread "main" 
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableMap.put(Collections.java:1457)
at ImmutableListDemo.main(File.java:17)

在Java 9 中创建不可变映射

为了在Java 9 中创建不可变映射,我们使用of()ofEntries()方法。
在Java 9 中创建不可变映射的Java代码:

// Java code illustrating of() method
import java.util.*;
class ImmutableListDemo
{
    public static void main(String args[])
    {
        // empty immutable map
        Map immutable1 = Map.of();
           
        // non-empty immutable map
        Map immutable2 = Map.of(1, "ide",2, "quiz");
          
        // adding key-value pair in these immutable map
        immutable1.put(1,"gfg");
        immutable2.put(3,"contribute");
              
    }
}

运行上述代码后,我们将有 UnsupportedOperationException。
在Java 9 中使用 Map.ofEntries() 方法创建不可变映射的Java代码:

// Java code illustrating ofEntries method
import java.util.*;
import java.util.Map.Entry;
class ImmutableListDemo
{
    public static void main(String args[])
    {
        // empty immutable map
        Map immutable = Map.ofEntries();
           
        // non-empty immutable map
        Map.Entry entry1 = Map.entry(1, "gfg");
        Map.Entry entry2 = Map.entry(2, "contribute");
           
        Map immubatleMap = Map.ofEntries(entry1,
                         entry2);     
    }
}

所以 of() 和 ofEntries() 是用于在Java 9 中创建不可变映射的方法。