原文: 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

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

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

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

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

  1. List<String> list = new ArrayList<String>();
  2. list.add("Chaitanya");
  3. list.add("Rick");
  4. list.add("Glenn");
  5. List<String> immuList = Collections.unmodifiableList(list);

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

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

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

  1. static <E> List<E> of()

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

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

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

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

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

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

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

什么是不可变List

  1. 不可变List不允许添加,删除和更新其元素。
  1. jshell> List<String> immuList = List.of("Chaitanya", "Rick", "Glenn");
  2. immuList ==> [Chaitanya, Rick, Glenn]
  3. jshell> immuList.add("Negan")
  4. | java.lang.UnsupportedOperationException thrown:
  5. | at ImmutableCollections.uoe (ImmutableCollections.java:71)
  6. | at ImmutableCollections$AbstractImmutableList.add
  7. (ImmutableCollections.java:77)
  8. | at (#2:1)
  1. 我们不能将null元素添加到不可变List中。
  1. jshell> List<String> immuList = List.of("Chaitanya", "Rick", "Glenn");
  2. immuList ==> [Chaitanya, Rick, Glenn]
  3. jshell> immuList.add(null)
  4. | java.lang.UnsupportedOperationException thrown:
  5. | at ImmutableCollections.uoe (ImmutableCollections.java:71)
  6. | at ImmutableCollections$AbstractImmutableList.add
  7. (ImmutableCollections.java:77)
  8. | at (#2:1)

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