Java 9 创建不可变Map的工厂方法
在Java 9中,有一些功能被添加到Java语言中,而不可变Map的工厂方法就是其中之一。
不可变Map的特点
- 顾名思义,这些Map是不可变的。
- 如果试图在Map中添加、删除和更新元素,我们会出现UnsupportedOperationException。
- 不可变的Map也不允许出现空元素。
- 如果试图用空元素创建一个不可变的Map,我们会出现NullPointerException。如果试图在Map中添加空元素,我们会产生UnsupportedOperationException。
在Java 8中创建不可变的Map
要在java 8中创建不可修改的Map,我们使用java.util.unmodifiableMap(Map)方法。 unmodifiableMap(Map): 该方法返回指定Map的不可修改的视图。这个方法允许模块为用户提供对内部Map的 “只读 “访问。
语法:公共静态Map unmodifiableMap(Map map)
返回:一个指定地图的不可修改的视图。
异常: NA
不变的空和无空Map的Java代码。
// Java code illustrating immutable map in java 8
import java.util.*;
class ImmutableListDemo
{
public static void main(String args[])
{
// empty map
Map<Integer, String> empty = new HashMap();
Map immutable1 = Collections.unmodifiableMap(empty);
// non-empty map
Map<Integer, String> 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中 创建不可变的Map
为了在java 9中创建不可变的Map,我们使用 of() 和 ofEntries() 方法。
Java代码,在java 9中创建不可变的Map。
// Java code illustrating of() method
import java.util.*;
class ImmutableListDemo
{
public static void main(String args[])
{
// empty immutable map
Map<Integer, String> immutable1 = Map.of();
// non-empty immutable map
Map<Integer, String> 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代码,在Java 9中使用Map.ofEntries()方法创建不可变的Map。
// 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<Integer, String> immutable = Map.ofEntries();
// non-empty immutable map
Map.Entry<Integer, String> entry1 = Map.entry(1, "gfg");
Map.Entry<Integer, String> entry2 = Map.entry(2, "contribute");
Map<Integer, String> immubatleMap = Map.ofEntries(entry1,
entry2);
}
}
所以of()和ofEntries()是java 9中用来创建不可变的Map的方法。