在Java 9 中创建不可变集的工厂方法
Java 9 于 2017 年 3 月左右发布,请安装 jdk 9,这将有助于理解本文中使用的代码。在Java 9 中, Java语言中添加了一些特性,不可变 Set 的工厂方法就是其中之一。
所以让我们开始吧!
不可变集的特点:
- 顾名思义,这些 Set 是不可变的。
- 如果尝试添加、删除和更新集合中的元素,我们将遇到 UnsupportedOperationException。
- 不可变集也不允许空元素。
- 如果尝试使用 null 元素创建不可变集,我们将遇到 NullPointerException。如果尝试在集合中添加空元素,我们将遇到 UnsupportedOperationException。
在Java 8 中创建不可变集
在Java 8 中创建不可变集合,我们使用Java .util.Collections.unmodifiableSet(Set set) 方法。此方法返回指定集合的不可修改视图。这种方法允许模块为用户提供对内部集合的“只读”访问。
Syntax: public static Set unmodifiableSet(Set set)
Returns: an unmodifiable view of the specified set.
Exception: NA
Java 8中不可变空集和非空集的Java代码:
// Java code illustrating immutable set in java 8
import java.util.*;
class GfG
{
public static void main(String args[])
{
// creating empty set
Set s1 = new HashSet();
Set us1 = Collections.unmodifiableSet(s1);
// creating non-empty set
Set s2 = new HashSet();
s2.add("contribute.geeksforgeeks.org");
Set us2 = Collections.unmodifiableSet(s2);
System.out.println(us1);
System.out.println(us2);
}
}
输出:
[]
[contribute.geeksforgeeks.org]
现在让我们尝试在这些不可变集合中添加元素:
// Java code illustrating immutable set in java 8
import java.util.*;
class GfG
{
public static void main(String args[])
{
// creating empty set and unmodifiable set
HashSet s1 = new HashSet();
Set us1 = Collections.unmodifiableSet(s1);
// creating non-empty set and unmodifiable set
HashSet s2 = new HashSet();
s2.add("contribute.geeksforgeeks.org");
Set us2 = Collections.unmodifiableSet(s2);
// try adding new element
us1.add("gfg");
us2.add("ide.geeksforgeeks");
}
}
上面的代码会产生异常,因为我们试图在不可变集合中添加元素。
Runtime Error : Exception in thread "main"
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
at ImmutableListDemo.main(File.java:16)
在Java 9 中创建不可变集
为了在Java 9 中创建不可变集合,我们使用of()方法。
在Java 9 中创建不可变集的Java代码:
// Java code illustrating of() method
import java.util.Set;
class GfG
{
public static void main(String args[])
{
// empty immutable set
Set is1 = Set.of("ide", "code", "practice");
System.out.println(is1);
}
}
输出:
[ide.code.practice]
现在让我们尝试在这些不可变集合中添加元素:
// Java code illustrating of() method
import java.util.*;
import com.google.common.collect.ImmutableSet;
class GfG
{
public static void main(String args[])
{
// empty immutable set
Set<>String is1 = Set.of();
// non-empty immuttable set
Set is2 = Set.of("ide", "contribute", "support");
// Adding an element throws exception
is1.add(null);
is2.add("set");
}
}
Exception in thread "main" java.lang.UnsupportedOperationException
at com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:218)
at ImmutableListDemo.main(Main.java:16)