前言
Java 9 对于不可变集合可以使用工厂模式进行创建,我们来看一下,如何来创建不可变List、不可变Map、不可变Set。
正文
创建不可变List(Immutable List)
使用List.of()静态工厂方法创建不可变列表。它有以下不同的重载版本:
1 | static <E> List<E> of() |
这些方法创建的List实例具有以下特征:
- 这些
List是不可变的。在这些List中不能添加、删除或替换元素。调用任何mutator方法(即add、addAll、clear、remove、removeAll、replaceAll)总是会引发UnsupportedOperationException。 - 它们不允许空元素。尝试添加空元素会导致
NullPointerException。 - 如果所有元素都是可序列化的,则它们是可序列化的。
- 列表中元素的顺序与提供的参数或提供的数组中的元素的顺序相同。
让我们来看几个使用不可变列表的例子。
1 | package com.howtodoinjava; |
创建不可变Set(Immutable Set)
Set的行为与List非常相似,只有很少的区别。如:
- 设置不允许重复的元素。传递的任何重复元素都会导致
IllegalArgumentException。 - 集合元素的迭代顺序是未指定的,可能会发生变化。
所有的Set工厂方法都具有与List相同的签名。
1 | static <E> Set<E> of() |
我们来看几个不可变Set的例子。
1 | import java.util.Set; |
创建不可变Map(Immutable Map)
Map工厂方法与List或Set重载工厂方法相同。唯一的区别是方法的签名采用交替的键和值作为参数。如下:
1 | static <K,V> Map<K,V> of() |
Java 9 还提供了一个特殊的方法来创建Map实例。
1 | static <K,V> Map.Entry<K,V> entry(K k, V v) |
我们来看几个Java 9 创建不可变Map的例子。
1 | import java.util.Map; |
结语
可以看到在Java 9中创建不可变集合的新工厂方法非常易读且易于使用。

