Java9 工厂方法
Java 9 Collection库包括用于List,Set和Map接口的静态工厂方法。这些方法对于创建少量集合很有用。
假设,如果要创建5个元素的列表,则需要编写以下代码。
Java列表示例
import java.util.ArrayList;
import java.util.List;
public class FactoryMethodsExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add("JavaFX");
list.add("Spring");
list.add("Hibernate");
list.add("JSP");
for(String l : list){
System.out.println(l);
}
}
}
输出:
Java
JavaFX
Spring
Hibernate
JSP
在上面的代码中,每个列表元素的添加方法都反复称为
,而在Java 9中,我们可以使用工厂方法在单行代码中进行添加。
用于收集的工厂方法
工厂方法是静态类型的特殊类型,用于创建
不可修改的实例。这意味着我们可以使用这些方法来创建少量元素的列表,集合和映射。
它是不可修改的,因此添加新元素将抛出
java.lang.UnsupportedOperationException
每个接口都有其自己的工厂方法,我们将列出所有方法在下表中。
列表接口的工厂方法
修饰符 |
方法 |
说明 |
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()工厂以各种简单的方式编写此代码。方法。
import java.util.List;
public class FactoryMethodsExample {
public static void main(String[] args) {
List<String> list = List.of("Java","JavaFX","Spring","Hibernate","JSP");
for(String l:list) {
System.out.println(l);
}
}
}
输出:
Java
JavaFX
Spring
Hibernate
JSP
Java 9 Set接口
Java Set接口提供了一个
Set.of()静态工厂方法,该方法用于创建不可变集合。用此方法创建的set实例具有以下特征。
这是一成不变的
没有空元素
如果所有元素均可序列化,则可序列化。
没有重复的元素。
集合元素的迭代顺序未指定,并且可能会发生变化。
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设置接口工厂方法示例
import java.util.Set;
public class FactoryMethodsExample {
public static void main(String[] args) {
Set<String> set = Set.of("Java","JavaFX","Spring","Hibernate","JSP");
for(String l:set) {
System.out.println(l);
}
}
}
输出:
Spring
JavaFX
JSP
Java
Hibernate
Java 9 Map Interface Factory方法
在Java 9中,Map包含Map.of()和Map.ofEntries()静态工厂方法,它们提供了一种方便的方法来creae不变的地图。
通过这些方法创建的地图具有以下特征。
这是一成不变的
不允许使用空键和空值
如果所有键和值都可以序列化,则可以序列化
它在创建时拒绝重复的密钥
映射的迭代顺序未指定,并且可能会发生变化。
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> | (t k,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> | (t k,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> | (t k,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 <?扩展K ,?扩展V> ...条目) |
它返回一个不变的映射,其中包含从给定条目中提取的键和值。 |
Java 9 Map Interface工厂方法示例
import java.util.Map;
public class FactoryMethodsExample {
public static void main(String[] args) {
Map<Integer,String> map = Map.of(101,"JavaFX",102,"Hibernate",103,"Spring MVC");
for(Map.Entry<Integer, String> m : map.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
输出:
102 Hibernate
103 Spring MVC
101 JavaFX
Java 9 Map接口的Entries()方法示例
在Java 9中,除了static
Map.of()方法之外,Map接口包括另一种静态方法
Map.ofEntries()。此方法用于创建
Map.Entry 实例的地图。
在以下示例中,我们将在多个map.entry实例的帮助下创建地图实例。
import java.util.Map;
public class FactoryMethodsExample {
public static void main(String[] args) {
// Creating Map Entry
Map.Entry<Integer, String> e1 = Map.entry(101, "Java");
Map.Entry<Integer, String> e2 = Map.entry(102, "Spring");
// Creating Map using map entries
Map<Integer, String> map = Map.ofEntries(e1,e2);
// Iterating Map
for(Map.Entry<Integer, String> m : map.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
输出: