欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

optional类的使用

程序员文章站 2022-03-04 10:51:38
...

概述

它是java.util包下的一个类,是一个包裹对象的容器,它可以包裹null或非null的对象。如果你要获取容器中的对象,需要使用get()方法。它的出现是为我们解决空指针异常的,以前我们写代码如果不进行if判断,会经常出现异常。现在有了他就会很优雅。因为它本身就是个对象,不管放进去的对象为不为null,始终不会返回null,所以你也不需要在你的业务流程中进行一大堆的判断,避免了程序运行时的空指针异常。

Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,使用Optional类可以避免显式的null值判断(null的防御性检查),避免null导致的NPE(NullPointerException)

使用

isPresent

一般不推荐使用,因为这种用法不但没有减少null的防御性检查,而且增加了Optional包装的过程,违背了Optional设计的初衷

public static String getGender(Student student)
{
    Optional<Student> stuOpt =  Optional.ofNullable(student);
    if(stuOpt.isPresent())
    {
        return stuOpt.get().getGender();
    }
    
    return "Unkown";
}

ifPresent

判断是否为空,当不为空时,结合lambda表达式使用,运行相应的方法,但是返回值为空

public static void printName(Student student)
{
    Optional.ofNullable(student).ifPresent(u ->  System.out.println("The student name is : " + u.getName()));
}

filter

完成对符合相应条件对象的筛选

public static void filterAge(Student student)
{
    Optional.ofNullable(student).filter( u -> u.getAge() > 18).ifPresent(u ->  System.out.println("The student age is more than 18."));
}

map

将对象进行操作后,可返回另一个经optional包装的对象

public static Optional<Integer> getAge(Student student)
{
    return Optional.ofNullable(student).map(u -> u.getAge()); 
}

参考文档

【java8新特性】Optional详解

Jdk1.8新特性学习(Optional)

相关标签: 点点星星 java