java9不可变集示例

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

此示例演示如何使用新的Java9集合工厂方法创建不可变集

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

Java9不可变集示例

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

package theitroad.local;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class UnmodifiableSetExample {

	public static void main(String[] args) {
		Set<String> emptySet = new HashSet<String>();
		Set<String> immutableSet = Collections.unmodifiableSet(emptySet);
	}

}

什么是不变集

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

在集合中添加或者删除项目。如果你尝试这样做,这将在

java.lang.UnsupportedOperationException

修改集合元素。这样做会导致

java.lang.UnsupportedOperationException

要添加null元素的集合。如果我们尝试向集合中添加一个null元素,那么最终将得到一个

java.lang.NullPointerException

在Java9中创建空的不可变集

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

of()

,请参阅下面的示例

package theitroad.local;

import java.util.Set;

public class Java9EmptyImmutableSetExample {
	public static void main(String[] args) {
		Set<String> emptySet = Set.of();
	}
}

用java9中的元素创建不可变集

有10种工厂方法可以创建最多10个元素的不可变集合(来源:Java 9 Set interface Javadoc):

static <E> Set<E>	of(E e1)	
Returns an immutable set containing one element.

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

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

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

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

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

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

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

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

static <E> Set<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 set containing ten elements.

以及一个参数数目可变的方法,可用于创建具有任意数量元素的不可变集:

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

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

package theitroad.local;

import java.util.Set;

public class Java9ImmutableSetExample {
	public static void main(String[] args) {
		Set set = Set.of("A", "B", "C");
	}
}