java9不可变列表示例

时间:2020-02-23 14:37:04  来源:igfitidea点击:

这个示例演示了如何用Java方法创建不可变的集合

随着Java9的发布,Oracle在获取其他流行的JVM语言(如Kotlin、Guava、Scala等)的工作实践方面迈出了一步。这是在适当考虑JDK的向后兼容性和语法一致性的前提下完成的。Java9的这些新特性之一是创建不可变(不可修改)列表。

Java9不可变列表示例

在Java9之前,不可变列表的创建是一项冗长的任务。例如,为了使用Java 9之前的版本创建一个空的不可变列表,我们使用了以下代码:

package theitroad.local;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class UnmodifiableListExample {

	public static void main(String[] args) {
		List<String> emptyList = new ArrayList<>();
		List<String> immutableList = Collections.unmodifiableList(emptyList);
	}

}

什么是不可变列表

一旦在Java中创建了不可变的对象就不能更改值。不可变列表也不例外。你可以 不能

在列表中添加或者删除条目。如果你尝试这样做,这将在

java.lang.UnsupportedOperationException

修改列表的元素。这样做会导致

java.lang.UnsupportedOperationException

向列表中添加空元素。如果我们尝试向列表中添加一个null元素,那么我们将得到一个

java.lang.NullPointerException

在Java9中创建空的不可变列表

要在Java9中创建一个空列表,我们只需调用factory list方法

of()

,请参阅下面的示例

package theitroad.local;

import java.util.List;

public class Java9EmptyImmutableListExample {
	public static void main(String[] args) {
		List<String> emptyList = List.of();
	}
}

用java9中的元素创建不可变列表

有10种工厂方法来创建最多10个元素的不可变列表(来源:Java 9 List interface Javadoc):

static <E> List<E>	of(E e1)	
Returns an immutable list containing one element.

static <E> List<E>	of(E e1, E e2)	
Returns an immutable list containing two elements.

static <E> List<E>	of(E e1, E e2, E e3)	
Returns an immutable list containing three elements.

static <E> List<E>	of(E e1, E e2, E e3, E e4)	
Returns an immutable list containing four elements.

static <E> List<E>	of(E e1, E e2, E e3, E e4, E e5)	
Returns an immutable list containing five elements.

static <E> List<E>	of(E e1, E e2, E e3, E e4, E e5, E e6)	
Returns an immutable list containing six elements.

static <E> List<E>	of(E e1, E e2, E e3, E e4, E e5, E e6, E e7)	
Returns an immutable list containing seven elements.

static <E> List<E>	of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)	
Returns an immutable list containing eight elements.

static <E> List<E>	of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)	
Returns an immutable list containing nine elements.

static <E> List<E>	of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10)	
Returns an immutable list containing ten elements.

以及一个参数数目可变的方法,它允许我们创建具有所需数量元素的不可变列表:

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

下面的示例创建了一个由3个元素组成的不可变列表:

package theitroad.local;

import java.util.List;

public class Java9ImmutableListExample {
	public static void main(String[] args) {
		List<String> list = List.of("A", "B", "C");
	}
}