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"); } }