原文: https://beginnersbook.com/2018/04/java-9-factory-method-to-create-immutable-list/
Java 9 到中引入了几种有用的工厂方法,创建了不可变(不可修改)List
。
在我们看到 Java 9 中引入的工厂方法之前。让我们看看我们在 Java 9 之前如何创建不可变List
。
在 Java 9 之前,我们必须使用Collections
类的unmodifiableList()
方法来创建不可变List
。
List<String> noElementList = new ArrayList<String>();
List<String> immuList = Collections.unmodifiableList(noElementList);
**注意:**让我们测试 Java Shell(JShell)中的代码。
List<String> list = new ArrayList<String>();
list.add("Chaitanya");
list.add("Rick");
list.add("Glenn");
List<String> immuList = Collections.unmodifiableList(list);
Java 9 引入了of()
方法的几个版本来创建不可修改的列表。
static <E> List<E> of()
List<String> immuList = List.of();
让我们采用与上面使用unmodifiableList()
方法相同的示例。您可以看到在 Java 9 中创建此类列表是多么简单。我们使用List
的工厂方法将 5 行代码减少到一行。
List<String> immuList = List.of("Chaitanya", "Rick", "Glenn");
- 不可变
List
不允许添加,删除和更新其元素。
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)
- 我们不能将
null
元素添加到不可变List
中。
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)