介绍
Oracle 在2017年3月左右发布Java新版本:Java SE9。陆续我会发表一系列有关Java SE 9新功能的文章,这是本系列的第四篇。
我已经发表了几篇有关Java SE 9新功能的文章。 在阅读这篇文章之前,请阅读它们。 这篇文章是 Java SE 9:Immutable List的工厂方法详解的延续。
在本文中,我将带着大家一起来讨论一下Java SE 9新功能:Immutable Set的工厂方法详解,并提供一些简单而合适的示例。
Java SE 8:空的不可变集合
在Java SE 8和更早版本中,如果我们要创建一个空的Immutable或Unmodifiable Set,则可以使用Collections
类提供的静态方法:unmodifiableSet
,如下所示:
Set<String> emptySet = new HashSet<>();
Set<String> immutableSet = Collections.unmodifiableSet(emptySet);
上述,我们可以看到创建一个简单的空集合是如此的繁琐且冗长。现在让我们在Java SE 9中看看该如何操作。
注意:
<>
操作符在Java SE 6和早期版本中不起作用,其余代码在所有Java版本中通用。
Java SE 9:空的不可变集合
为了克服上述的这些缺点,Java SE 9在Set
接口中引入了两个有用的方法,这样我们不需要使用这些繁琐的步骤来创建空的不可变集合。
通过Java SE 9 Set API,我们可以在Set
接口中找到以下方法签名。
static <E> Set<E> of()
它用于创建一个空的不可变集(一个具有零个元素的集合)。
Set<String> immutableSet = Set.of();
在这里我们可以看到,在Java SE 9中创建一个空的不可变集合非常的容易。
Java SE 8:非空的不可变集合
在本节中,我们将看到如何在Java SE 8和更早版本中创建不可变的非空集合。我们可以使用Collections
类中的unmodifiableable
方法创建一个不可变的非空集合,如下所示:
Set<String> nonemptySet = new HashSet<>();
nonemptySet.add("one");
nonemptySet.add("two");
nonemptySet.add("three");
Set<String> immutableSet = Collections.unmodifiableSet(nonemptySet);
注意:
<>
操作符在Java SE 6和早期版本中不起作用,其余代码在所有Java版本中通用。
下面我们再来看看在Java SE 9 中是如何操作的。
Java SE 9:非空的不可变集合
在本节中,我们可以看到如何在Java SE 9版本中创建不可变的非空集合。通过查阅Java SE 9 Set Interface API,我们可以看到一组重载方法,如下所示:
static <E> Set<E> of(E e1)
static <E> Set<E> of(E e1,E e2)
static <E> Set<E> of(E e1,E e2,E e3)
static <E> Set<E> of(E e1,E e2,E e3,E e4)
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5)
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5,E e6)
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5,E e6,E e7)
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5,E e6,E e7,E e8)
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5,E e6,E e7,E e8,E e9)
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)
例子:
Set<String> immutableSet = Set.of("one","two","three");
创建一个不可变的非空集合非常简单。
让我们在Java SE 9 REPL中测试一下以上代码:
jshell> Set<String> immutableSet = Set.of("one","two","three")
immutableSet ==> [one, two, three]
在这里我们可以看到,在Java SE 9中创建非空不可变集合是如此的容易。
Java SE 9:变长参数的不可变集合
Oracle引入了另一种具有变长参数的Set.of()
方法。以下是用于在Java SE 9中创建非空不可变集合的Var-Args
方法
static <E> Set<E> of(E... elements)
它主要用来创建带有元素数组的不可变集合,如下所示:
String[] nameArr = { "one", "two", "three"};
Set<String[]> set= Set.<String[]>of(nameArr);
下面,我们在Java REPL 看一下执行的结果:
jshell> String[] nameArr = { "one", "two", "three"}
nameArr ==> String[3] { "one", "two", "three" }
jshell> Set<String[]> set = Set.<String[]>of(nameArr);
set ==> [[Ljava.lang.String;@56ef9176]
jshell> set
set ==> [[Ljava.lang.String;@56ef9176]
上述,我们创建了带有字符串元素数组的不可变集合。
不可变集合的特征类似于不可变列表。您可以在这里详细找到这些信息:Java SE 9:Immutable List的工厂方法详解。
以上就是Java SE 9:Immutable Set的工厂方法详解的基本信息。我们将在以后的文章中讨论更多Java SE 9新功能。
原文链接:https://www.journaldev.com/12984/javase9-factories-for-immutable-set