前言
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中创建不可变集合的新工厂方法非常易读且易于使用。