空集合:返回什么合适
返回空集合 vs 返回 null
永远不要返回 null!
java
// ❌ 返回 null:调用者必须 null 检查
public List<Order> getOrders() {
return null; // 调用者容易忘记判空
}
// ✅ 返回空集合:调用者无需判空
public List<Order> getOrders() {
return Collections.emptyList(); // 安全的默认值
}Collections 空集合工厂方法
java
List<String> emptyList = Collections.emptyList();
Set<String> emptySet = Collections.emptySet();
Map<K, V> emptyMap = Collections.emptyMap();
Queue<E> emptyQueue = Collections.emptyQueue();
Deque<E> emptyDeque = Collections.emptyDeque();这些方法返回的是不可变的空集合。
单元素集合
java
List<String> single = Collections.singletonList("only");
Set<String> singleSet = Collections.singleton("only");
Map<K, V> singleMap = Collections.singletonMap(k, v);JDK 9+ 的 List.of / Set.of
java
List<String> empty = List.of();
Set<String> emptySet = Set.of();
Map<String, Integer> emptyMap = Map.of();为什么不要返回 null
java
// ❌ 返回 null
public List<Item> search(String query) {
return null;
}
// 调用时忘记判空
for (Item item : search("test")) { // NullPointerException!
System.out.println(item);
}
// ✅ 返回空集合
public List<Item> search(String query) {
return Collections.emptyList();
}
// 遍历空集合不会报错
for (Item item : search("test")) { // 安全,循环体不执行
System.out.println(item);
}总结
| 要点 | 说明 |
|---|---|
| 永远返回 null | 返回空集合代替 |
| Collections.emptyXxx | JDK 9+ 推荐 List.of() |
| 不可变 | 空集合工厂返回不可变对象 |
一句话:空集合比 null 更安全,永远不要返回 null。
