多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java 9 不可变集示例 > 原文: [https://javatutorial.net/java-9-immutable-set-example](https://javatutorial.net/java-9-immutable-set-example) 本示例演示了如何使用新的 Java 9 `Collection`工厂方法创建不可变的`Set`。 在 Java 9 发行版中,Oracle 从其他流行的 [JVM](https://javatutorial.net/jvm-explained) 语言(例如 Kotlin,Guava,Scala 等)获取工作实践方面迈出了第一步。做到这一点时要适当考虑到跨语言的向后兼容性和语法一致性。 [JDK](https://javatutorial.net/install-java-8-jdk-on-ubuntu) 。 那些 [Java 9](https://javatutorial.net/install-java-9-eclipse) 新功能之一是**不变(不可修改)集**的创建。 ![Java 9 immutable Set example](https://img.kancloud.cn/f1/a0/f1a0fb1986400f0028b9720697c2589e_707x262.jpg) Java 9 不可变集示例 在 Java 9 之前,创建不可变`Set`是某种冗长的任务。 例如,要使用 Java 9 之前的版本创建一个空的不可变`Set`,我们使用以下代码: ```java package javatutorial.net; import java.util.Collections; import java.util.HashSet; import java.util.Set; public class UnmodifiableSetExample { public static void main(String[] args) { Set<String> emptySet = new HashSet<String>(); Set<String> immutableSet = Collections.unmodifiableSet(emptySet); } } ``` ## 什么是不可变集 一旦在 Java 中创建了不可变对象,就无法更改值。 不可变集也不例外。 您**不能**: * 从集合中添加或删除条目。 如果您尝试这样做,将在`java.lang.UnsupportedOperationException`中解决 * 修改`Set`元素。 尝试这样做会导致`java.lang.UnsupportedOperationException` * 将空元素添加到集合中。 如果您尝试向集合中添加一个`null`元素,则结果为`java.lang.NullPointerException` ## 在 Java 9 中创建空的不可变集 要在 Java 9 中创建一个空列表,我们需要做的就是调用`List`工厂方法`of()`,请参见下面的示例 ```java package javatutorial.net; import java.util.Set; public class Java9EmptyImmutableSetExample { public static void main(String[] args) { Set<String> emptySet = Set.of(); } } ``` ## 在 Java 9 中使用元素创建不可变集 有 10 种工厂方法可创建不可变的`Set`,最多可包含 10 个元素(来源: [Java 9 `Set`接口 Javadoc](https://docs.oracle.com/javase/9/docs/api/java/util/Set.html) ): ```java static <E> Set<E> of​(E e1) Returns an immutable set containing one element. static <E> Set<E> of​(E e1, E e2) Returns an immutable set containing two elements. static <E> Set<E> of​(E e1, E e2, E e3) Returns an immutable set containing three elements. static <E> Set<E> of​(E e1, E e2, E e3, E e4) Returns an immutable set containing four elements. static <E> Set<E> of​(E e1, E e2, E e3, E e4, E e5) Returns an immutable set containing five elements. static <E> Set<E> of​(E e1, E e2, E e3, E e4, E e5, E e6) Returns an immutable set containing six elements. static <E> Set<E> of​(E e1, E e2, E e3, E e4, E e5, E e6, E e7) Returns an immutable set containing seven elements. static <E> Set<E> of​(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) Returns an immutable set containing eight elements. static <E> Set<E> of​(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) Returns an immutable set containing nine elements. static <E> Set<E> of​(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) Returns an immutable set containing ten elements. ``` 以及一种具有可变数量参数的方法,可让您创建具有任意数量元素的不可变集: ```java static <E> Set<E> of​(E... elements) ``` 下面的示例创建了一个由 3 个元素组成的不可变的`Set`: ```java package javatutorial.net; import java.util.Set; public class Java9ImmutableSetExample { public static void main(String[] args) { Set set = Set.of("A", "B", "C"); } } ``` 您将在此处找到的许多教程都是基于 Edward Lavieri 博士和 Peter Verhas 博士撰写的 [Mastering Java 9](https://www.amazon.com/Mastering-Java-reactive-modular-concurrent/dp/1786468735/ref=sr_1_3?ie=UTF8&qid=1520921208&sr=8-3&keywords=mastering+java+9) 。 本书将为您提供对 Java 9 新概念和工具的完整而深刻的理解。