当前位置: 代码网 > it编程>编程语言>Java > 浅析Java中如何优雅地处理null值

浅析Java中如何优雅地处理null值

2025年04月16日 Java 我要评论
假设我们有一个学生对象,以及这个学生对象的 optional 包装器:public class student { private string name; private integer

假设我们有一个学生对象,以及这个学生对象的 optional 包装器:

public class student {
    private string name;
    private integer age;

    // 全参构造函数
    public student(string name, integer age) {
        this.name = name;
        this.age = age;
    }

    public string getname() {
        return name;
    }

    public integer getage() {
        return age;
    }
    // tostring 方法
    @override
    public string tostring() {
        return"student{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}

public class optionaltest {
    public static void main(string[] args) {
        student student = new student("bob", 18);
        optional<student> studentopt = optional.ofnullable(student);
    }
}

如果不与 lambda 结合使用,optional 并不能简化原本繁琐的 null 值检查。例如:

// 编写方法 1
if (student == null) {
    return unknown_student;
} else {
    return student;
}
// 编写方法 2
if (!studentopt.ispresent()) {
    return unknown_student;
} else {
    return studentopt.get();
}

只有将 optional 与 lambda 结合使用,才能发挥它真正的威力!

现在,让我们对比一下 java 8 中 lambda + optional 与传统 java 在以下四种常见 null 处理场景中的差异。

场景 1:不为 null 则执行

// if 语句
if (student!= null) {
    system.out.println(student);
}
// optional
studentopt.ifpresent(system.out::println);

场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常

// if 语句
if (student == null) {
    return unknown_student; // 或抛出异常
} else {
    return student;
}
// optional
return studentopt.orelse(unknown_student);
return studentopt.orelsethrow(runtimeexception::new);

场景 3:不为 null 则返回,为 null 则由调用方法

// if 语句
if (student == null) {
    return unknown_student;
} else {
    return generatewithfunction();
}
// optional
return studentopt.orelseget(() -> generatewithfunction());

场景 4:嵌套 null 检查

// java 7
if (student!= null) {
    string name = student.getname();
    if (name!= null) {
        return name;
    } else {
        return null;
    }
} else {
    return null;
}
// java 8
return studentopt.map(student::getname).orelse(null);

从以上四种场景可以明显看出,optional + lambda 让我们少写了很多 if-else 代码块。尤其是场景 4,传统的 java 写法显得冗长且难以理解,而 optional+lambda 则简洁明了,清晰易懂。

总结

通过结合 lambda 表达式和 optional,java 的 null 处理变得更加优雅和简洁。希望这篇文章能帮助你更好地理解和使用这些特性。

到此这篇关于浅析java中如何优雅地处理null值的文章就介绍到这了,更多相关java处理null值内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com