Skip to content

Latest commit

 

History

History
96 lines (62 loc) · 3.17 KB

72.md

File metadata and controls

96 lines (62 loc) · 3.17 KB

Java 9 - 创建不可变List的工厂方法

原文: https://beginnersbook.com/2018/04/java-9-factory-method-to-create-immutable-list/

Java 9 到中引入了几种有用的工厂方法,创建了不可变(不可修改)List

1.在 Java 9 之前创建不可变List

在我们看到 Java 9 中引入的工厂方法之前。让我们看看我们在 Java 9 之前如何创建不可变List

1.1 在 java SE 9 之前创建空的不可变List

在 Java 9 之前,我们必须使用Collections类的unmodifiableList()方法来创建不可变List

List<String> noElementList = new ArrayList<String>();
List<String> immuList = Collections.unmodifiableList(noElementList);

**注意:**让我们测试 Java Shell(JShell)中的代码。

Creating immutable list before Java 9

1.2 在 Java SE 9 之前创建非空的不可变List

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

2. Java 9 - 使用List的静态工厂方法创建不可变List

Java 9 引入了of()方法的几个版本来创建不可修改的列表。

static <E> List<E> of()

2.1 Java 9 - 创建空的不可变List

List<String> immuList = List.of();

Java 9 Creating Empty List using of() method

2.2 Java 9 - 创建非空的不可变List

让我们采用与上面使用unmodifiableList()方法相同的示例。您可以看到在 Java 9 中创建此类列表是多么简单。我们使用List的工厂方法将 5 行代码减少到一行。

List<String> immuList = List.of("Chaitanya", "Rick", "Glenn");

Java 9 creating non empty immutable list

什么是不可变List

  1. 不可变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)
  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)

UnsupportedOperationException while adding null element to an immutable list