You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java Optional时如何为空值或空字符串设置默认值

问题根因

Optional.ofNullable() 仅会对 null 值做判断,你代码里的空字符串 "" 属于合法的非null对象,所以不会触发 orElse() 的默认值逻辑:
你传入的emp对象本身非null,调用getName()返回的空字符串也非null,最终直接返回了空字符串,默认值自然不生效。

修复方案

在map取值后增加filter过滤空值(包含空字符串、全空格字符串)即可,修改后的核心逻辑如下:

String value = Optional.ofNullable(emp)
    .map(Emp::getName)
    // 过滤空字符串、全空格字符串,JDK8环境可替换为 !name.isEmpty()
    .filter(name -> !name.isBlank())
    .orElse("Mark");

完整可运行代码

import java.util.Optional;

public class Test {

    public static void main(String[] args) {
        String str = "";
        Emp emp = new Emp();
        emp.setName(str);

        String value = Optional.ofNullable(emp)
                .map(Emp::getName)
                .filter(name -> !name.isBlank())
                .orElse("Mark");

        System.out.println(value); // 输出Mark
    }

}

class Emp {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

内容的提问来源于stack exchange,提问作者Pavan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:45:01