概述
它是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());
}