Skip to content

空集合:返回什么合适

返回空集合 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.emptyXxxJDK 9+ 推荐 List.of()
不可变空集合工厂返回不可变对象

一句话:空集合比 null 更安全,永远不要返回 null。


相关链接

基于 VitePress 构建