首页后端开发JAVAJava新特性:Optional类

Java新特性:Optional类

时间2023-11-27 15:59:02发布访客分类JAVA浏览1563
导读:Java新特性:Optional类 Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供了很多方法,这样我们就不用显式进行空值检测。Option...

Java新特性:Optional类

Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供了很多方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。 Java 8 引入 Optional 类,用来解决 NullPointerException。 Optional 代替 if…else 解决空指针问题,使代码更加简洁。

1、Optional类概述
1.1、Optional类介绍

Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供了很多方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。

Java 8 引入 Optional 类,用来解决 NullPointerException。 Optional 代替 if…else 解决空指针问题,使代码更加简洁。

1.2、Java8之前的空指针异常判断

Java 在使用对象过程中,访问任何方法或属性都可能导致 NullPointerException:

例如我们通过以下方法,获取存在 student 对象中的 Age 值。

        public String getIsocode (Student student){
    
            return student.getAge();

        }

在这样的示例中,如果我们想要避免由 studentstudent.age 为空而导致的空指针问题,我们就需要采用防御式检查减少 NullPointerException(在访问每一个值之前对其进行明确地检查):

       public String getIsocode (Student student){

            if (null == student) {
    
                // doSomething
                return "Unknown";

            }

            if (null = student.getAge()) {
    
                // doSomething
                return "Unknown";

            }
    
            return student.getAge();

        }

然而,这种方案并不是很理想,因为为此会多出多个不同的退出点(return),使得代码维护变得艰难,之后每个可能的 null 检查都会新增一个退出点。

为了简化这个过程,我们来看看用 Optional 类是怎么做的。

1.3、Java8之后Optional的使用

当需要判断的量多时,此时的这些判断语句可能会导致代码臃肿冗余,为此 Java8 特意推出了 Optional 类来帮助我们去处理空指针异常。

下面是 Optional 的一些基本用法:

@Data
public class Student {
    
    private Integer age;

}

---
public class Test {

    public static void main(String[] args) {
    
        // 假设 student 这个对象从数据库中查出的
        Student student = getStudent();
    
        // 创建一个可接受 null 的 Optiona l类
        OptionalStudent>
     optional = Optional.ofNullable(student);
    
        // 用法1:获取 student 对象中的某个值,如果不存在的话则取默认值(不具有短路作用)
        Integer a1 = optional.map(Student::getAge).orElse(20));
    
        // 用法2:获取 student 对象中的某个值,如果不存在的话则取默认值(具有短路作用,因为是懒加载)
        Integer a2 = optional.map(Student::getAge).orElseGet(() ->
     Integer.MAX_VALUE);
    
      	// 用法3:判断对象是否存在,不存在则抛出异常
        optional.orElseThrow(() ->
     new RuntimeException("student不存在!"));
    
      	// 用法4:判断对象是否存在,存在的话对对象进行操作,例如给对象赋初始值
        optional.ifPresent(o ->
     o.setAge(18));
    
      	// 用法5:对象存在时,且年龄满足一定条件容器才会继续保存这对象,否则将会剔除
        optional.filter(o ->
     o.getAge() >
     10);

    }

}
    

2、Optional类使用
2.1、Optional类常用方法总结

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Java新特性:Optional类
本文地址: https://pptw.com/jishu/557762.html
Discuz 社区论坛【Nginx+MySQL+PHP+Discuz】】 【Java 进阶篇】深入了解HTML表单标签

游客 回复需填写必要信息