Java 9 工厂方法

2024 年 8 月 29 日 | 阅读 6 分钟

Java 9 集合库包含 List、Set 和 Map 接口的静态工厂方法。 这些方法对于创建少量集合很有用。

例如,如果我们想创建一个包含 5 个元素的列表,我们需要编写以下代码。


Java 列表示例

输出

Java
JavaFX
Spring
Hibernate
JSP

在上面的代码中,对于每个列表元素,add 方法被重复调用,而在 Java 9 中,我们可以使用工厂方法在一行代码中完成它。


集合的工厂方法

工厂方法是特殊类型的静态方法,用于创建集合的不可修改实例。这意味着我们可以使用这些方法来创建包含少量元素的列表、集合和映射。

它是不可修改的,因此添加新元素将抛出java.lang.UnsupportedOperationException

每个接口都有自己的工厂方法,我们正在下表中列出所有方法。


List 接口的工厂方法

修饰符方法描述
static <E> List<E>Of()它返回一个包含零个元素的不可修改列表。
static <E> List<E>of(E e1)它返回一个包含一个元素的不可修改列表。
static <E> List<E>of(E... elements)它返回一个包含任意数量元素的不可修改列表。
static <E> List<E>of(E e1, E e2)它返回一个包含两个元素的不可修改列表。
static <E> List<E>of(E e1, E e2, E e3)它返回一个包含三个元素的不可修改列表。
static <E> List<E>of(E e1, E e2, E e3, E e4)它返回一个包含四个元素的不可修改列表。
static <E> List<E>of(E e1, E e2, E e3, E e4, E e5)它返回一个包含五个元素的不可修改列表。
static <E> List<E>of(E e1, E e2, E e3, E e4, E e5, E e6)它返回一个包含六个元素的不可修改列表。
static <E> List<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7)它返回一个包含七个元素的不可修改列表。
static <E> List<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)它返回一个包含八个元素的不可修改列表。
static <E> List<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)它返回一个包含九个元素的不可修改列表。
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)它返回一个包含十个元素的不可修改列表。

Java 9 列表工厂方法示例

在 Java 9 中,借助List.of() 工厂方法,我们可以用非常简单的方式编写此代码。

输出

Java
JavaFX
Spring
Hibernate
JSP

Java 9 Set 接口

Java Set 接口提供了一个 Set.of() 静态工厂方法,该方法用于创建不可修改的集合。 这种方法创建的集合实例具有以下特征。

  • 它是不可修改的
  • 没有空元素
  • 如果所有元素都可序列化,则它是可序列化的。
  • 没有重复的元素。
  • 集合元素的迭代顺序是不确定的,并且可能会发生变化。

Java 9 Set 接口工厂方法

下表包含 Set 接口的工厂方法。

修饰符和类型方法描述
static <E> Set<E>of()它返回一个包含零个元素的不可修改集合。
static <E> Set<E>of(E e1)它返回一个包含一个元素的不可修改集合。
static <E> Set<E>of(E... elements)它返回一个包含任意数量元素的不可修改集合。
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>它返回一个包含六个元素的不可修改集合。
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)它返回一个包含十个元素的不可修改集合。

Java 9 Set 接口工厂方法示例

输出

Spring
JavaFX
JSP
Java
Hibernate

Java 9 Map 接口工厂方法

在 Java 9 中,Map 包括 Map.of() 和 Map.ofEntries() 静态工厂方法,这些方法提供了一种创建不可修改映射的便捷方法。

这些方法创建的 Map 具有以下特征。

  • 它是不可修改的
  • 它不允许空键和值
  • 如果所有键和值都可序列化,则它是可序列化的
  • 它在创建时拒绝重复的键
  • 映射的迭代顺序是不确定的,并且可能会发生变化。

Java 9 Map 接口工厂方法

下表包含 Map 接口的工厂方法。

修饰符和类型方法描述
static <K,V> Map<K,V>of()它返回一个包含零个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1)它返回一个包含单个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1, K k2, V v2)它返回一个包含两个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1, K k2, V v2, K k3, V v3)它返回一个包含三个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4)它返回一个包含四个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)它返回一个包含五个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6)它返回一个包含六个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7)它返回一个包含七个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8)它返回一个包含八个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9)它返回一个包含九个映射的不可修改映射。
static <K,V> Map<K,V>of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10)它返回一个包含十个映射的不可修改映射。
static <K,V> Map<K,V>ofEntries(Map.Entry<? extends K,? extends V>... entries)它返回一个不可修改的映射,其中包含从给定条目中提取的键和值。

Java 9 Map 接口工厂方法示例

输出

102 Hibernate
103 Spring MVC
101 JavaFX

Java 9 Map 接口 ofEntries() 方法示例

在 Java 9 中,除了静态的 Map.of() 方法之外,Map 接口还包含另一个静态方法 Map.ofEntries()。 此方法用于创建 Map.Entry 实例的映射。

在下面的示例中,我们正在借助多个 map.entry 实例创建 map 实例。

输出

102 Spring
101 Java

下一个主题进程 API 改进