ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Java 9 - 创建不可变`List`的工厂方法 > 原文: [https://beginnersbook.com/2018/04/java-9-factory-method-to-create-immutable-list/](https://beginnersbook.com/2018/04/java-9-factory-method-to-create-immutable-list/) [Java 9](https://beginnersbook.com/2018/04/java-9-features-with-examples/) 到中引入了几种有用的工厂方法,创建了不可变(不可修改)`List`。 ## 1.在 Java 9 之前创建不可变`List` 在我们看到 Java 9 中引入的工厂方法之前。让我们看看我们在 Java 9 之前如何创建不可变`List`。 ### 1.1 在 java SE 9 之前创建空的不可变`List` 在 Java 9 之前,我们必须使用`Collections`类的`unmodifiableList()`方法来创建不可变`List`。 ```java List<String> noElementList = new ArrayList<String>(); List<String> immuList = Collections.unmodifiableList(noElementList); ``` **注意:**让我们测试 [Java Shell(JShell)](https://beginnersbook.com/2018/04/java-9-jshell-repl/)中的代码。 ![Creating immutable list before Java 9](https://img.kancloud.cn/99/b2/99b209b7bbeb8a2924aa605eec3cbb2a_1024x445.jpg) ### 1.2 在 Java SE 9 之前创建非空的不可变`List` ```java List<String> list = new ArrayList<String>(); list.add("Chaitanya"); list.add("Rick"); list.add("Glenn"); List<String> immuList = Collections.unmodifiableList(list); ``` ![Non Empty Immutable List Prior to Java SE 9](https://img.kancloud.cn/19/9a/199a00eb6b92075c9c1445b129ba6320_1024x641.jpg) ## 2\. Java 9 - 使用`List`的静态工厂方法创建不可变`List` Java 9 引入了`of()`方法的几个版本来创建不可修改的列表。 ```java static <E> List<E> of() ``` ### 2.1 Java 9 - 创建空的不可变`List` ```java List<String> immuList = List.of(); ``` ![Java 9 Creating Empty List using of() method](https://img.kancloud.cn/66/d3/66d376ed2ecd3250a7ba2d82b132c72f_1024x390.jpg) ### 2.2 Java 9 - 创建非空的不可变`List` 让我们采用与上面使用`unmodifiableList()`方法相同的示例。您可以看到在 Java 9 中创建此类列表是多么简单。我们使用`List`的工厂方法将 5 行代码减少到一行。 ```java List<String> immuList = List.of("Chaitanya", "Rick", "Glenn"); ``` ![Java 9 creating non empty immutable list](https://img.kancloud.cn/52/d1/52d1bb23f00789ccea1a81a119e3a82c_1024x390.jpg) ## 什么是不可变`List`? 1. 不可变`List`不允许添加,删除和更新其元素。 ```java jshell> List<String> immuList = List.of("Chaitanya", "Rick", "Glenn"); immuList ==> [Chaitanya, Rick, Glenn] jshell> immuList.add("Negan") | java.lang.UnsupportedOperationException thrown: | at ImmutableCollections.uoe (ImmutableCollections.java:71) | at ImmutableCollections$AbstractImmutableList.add (ImmutableCollections.java:77) | at (#2:1) ``` 2. 我们不能将`null`元素添加到不可变`List`中。 ```java jshell> List<String> immuList = List.of("Chaitanya", "Rick", "Glenn"); immuList ==> [Chaitanya, Rick, Glenn] jshell> immuList.add(null) | java.lang.UnsupportedOperationException thrown: | at ImmutableCollections.uoe (ImmutableCollections.java:71) | at ImmutableCollections$AbstractImmutableList.add (ImmutableCollections.java:77) | at (#2:1) ``` ![UnsupportedOperationException while adding null element to an immutable list](https://img.kancloud.cn/03/4f/034f9a9fed1ee8b12d78d34f4013a5fd_1024x453.jpg)