有几种方法可以在 Java 中创建不可变的空列表。UnsupportedOperationException如果对其执行任何修改操作,该列表将抛出一个。
⮚ 使用Arrays.asList()
Arrays.asList()方法返回由指定数组支持的固定大小的列表。如果我们不指定数组,这将返回一个不可变的空列表。
1
|
List<String> immutableList = Arrays.asList();
|
UnsupportedOperationException如果对其执行了添加或删除操作以及是否执行了ArrayIndexOutOfBoundsException任何更新操作(例如,通过List.set(int, Object)方法) , 该列表将抛出一个。
⮚ 使用集合
我们可以使用Collections.EMPTY_LIST它返回一个可序列化且不可变的空列表。
1
|
List<String> immutableList = Collections.EMPTY_LIST;
|
上述方法可能会引发未经检查的分配警告。以下示例演示了获取空列表的类型安全方法:
1
|
List<String> immutableList = Collections.emptyList();
|
⮚ 在 Java 8 中
我们可以调整Collectors.toList()前面讨论的收集器以始终生成不可变的空列表,如下所示:
1
2
3
|
List<String> immutableList = Stream.of(new String[] {})
.collect(Collectors.collectingAndThen(Collectors.toList(),
Collections::<String>unmodifiableList));
|
⮚ 使用Guava
Guava 提供了几种静态实用方法,可用于获取不可变的空列表。
1.ImmutableList.copyOf如果指定列表为空,则返回一个不可变的空列表。
1
2
|
List<String> mutableList = Lists.newArrayList();
ImmutableList<String> immutableList = ImmutableList.copyOf(mutableList);
|
如果指定的列表为空,该方法将抛出 a NullPointerException,并且基础可变列表中的任何更改在不可变列表中都将不可见。
2. Guava还提供了一个builder,可以类似的创建一个不可变的空列表实例。
1
2
|
ImmutableList<String> immutableList = new ImmutableList.Builder()
.build();
|
3.ImmutableList.of()也可以用来返回一个不可变的空列表。
此列表的行为和性能与 类似Collections.emptyList(),并且主要是为了代码的一致性和可维护性而更可取。该列表在内部转换为任何类型,因为它永远不会包含任何元素。
1
|
List<String> immutableList = ImmutableList.of();
|