在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 中创建不可变映射的方法。