Java9集合API与HTTP/2客户端API更新解读
立即解锁
发布时间: 2025-08-18 02:22:46 阅读量: 8 订阅数: 21 


Java 9核心特性与实战指南
### Java 9 集合 API 与 HTTP/2 客户端 API 更新解读
#### 1. 不可修改的集合
JDK 9 为 `Set` 和 `Map` 接口添加了静态工厂方法,用于创建不可修改的集合。
##### 1.1 不可修改的集合
JDK 9 为 `Set` 接口添加了重载的 `of()` 静态工厂方法,可用于创建不可修改的集合。以下是 `of()` 方法的所有版本:
```plaintext
static <E> Set<E> of()
static <E> Set<E> of(E e1)
static <E> Set<E> of(E e1, E e2)
// ... 其他版本
static <E> Set<E> of(E... elements)
```
前 11 个版本可用于创建包含 0 到 10 个元素的不可修改集合,而带有可变参数的版本可用于创建包含任意数量元素的不可修改集合。
返回的集合具有以下特性:
- **结构不可变**:尝试添加、替换或删除元素会抛出 `UnsupportedOperationException`。
- **不允许 null 元素**:若集合中有 null 元素,会抛出 `NullPointerException`。
- **可序列化**:若所有元素都可序列化,则集合可序列化。
- **不允许重复元素**:指定重复元素会抛出 `IllegalArgumentException`。
- **元素迭代顺序未指定**。
- **返回集合的实现类无保证**:不要期望返回的对象是 `HashSet` 或其他实现 `Set` 接口的类。
以下是创建不可修改集合的示例代码:
```java
import java.util.Set;
public class SetTest {
public static void main(String[] args) {
Set<Integer> emptySet = Set.of();
Set<Integer> luckyNumber = Set.of(19);
Set<String> vowels = Set.of("A", "E", "I", "O", "U");
System.out.println("emptySet = " + emptySet);
System.out.println("singletonSet = " + luckyNumber);
System.out.println("vowels = " + vowels);
try {
Set<Integer> set = Set.of(1, 2, null, 3);
} catch (NullPointerException e) {
System.out.println("Nulls not allowed in Set.of().");
}
try {
Set<Integer> set = Set.of(1, 2, 3, 2);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
try {
luckyNumber.add(8);
} catch (UnsupportedOperationException e) {
System.out.println("Cannot add an element.");
}
try {
luckyNumber.remove(0);
} catch (UnsupportedOperationException e) {
System.out.println("Cannot remove an element.");
}
}
}
```
##### 1.2 不可修改的映射
JDK 9 为 `Map` 接口添加了重载的 `of()` 静态工厂方法,用于创建不可修改的映射。以下是 `of()` 方法的 11 个版本:
```plaintext
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, 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)
```
若要创建包含任意数量条目的不可修改映射,可使用 `ofEntries()` 方法:
```java
<K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)
```
同时,JDK 9 还提供了 `entry()` 方法用于创建 `Map.Entry` 实例:
```java
<K,V> Map.Entry<K,V> entry(K k, V v)
```
返回的映射具有以下特性:
- **结构不可变**:尝试添加、替换或删除条目会抛出 `UnsupportedOperationException`。
- **键和值不允许为 null**:若键或值为 null,会抛出 `NullPointerException`。
- **可序列化**:若所有键和值都可序列化,则映射可序列化。
- **不允许重复键**:指定重复键会抛出 `IllegalArgumentException`。
- **映射迭代顺序未指定**。
- **返回映射的实现类无保证**:不要期望返回的对象是 `HashMap` 或其他实现 `Map` 接口的类。
以下是创建不可修改映射的示例代码:
```java
import java.util.Map;
import static java.util.Map.entry;
public class MapTest {
public static void main(String[] args) {
Map<Integer, String> emptyMap = Map.of();
Map<Integer, String> luckyNumber = Map.of(19, "Nineteen");
Map<Integer, String> numberToWord = Map.of(1, "One", 2, "Two", 3, "Three");
Map<String, String> days = Map.ofE
```
0
0
复制全文
相关推荐










