1.背景
调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数;否则的会出现空值异常。
据说在,Java8以前,Google Guava引入了Optionals类来解决NullPointerException,从而避免源码被各种null检查污染,以便开发者写出更加整洁的代码。Java 8也将Optional加入了官方库。
2.Optional的基本使用
- of() 为非null的值创建一个Optional
注意:如果传入参数为null,则抛出NullPointerException 。 - ofNullable() 为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
注意: 可以接受参数为null,区别于 of() 。
//of 为非null的值创建一个Optional
Optional<String> opt_full = Optional.of("helloworld");
//ofNullable() 为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
Optional<String> opt_empty = Optional.ofNullable(null);
- isPresent() 如果值存在返回true,否则返回false
System.out.println("opt_full:"+opt_full.isPresent());
System.out.println("opt_empty:"+opt_empty.isPresent()); - full.get() 如果Optional有值则将其返回,否则抛出NoSuchElementException *
if(opt_full.isPresent()){
System.out.println("opt_full的内容:"+opt_full.get());
}
- map 如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional
Optional<String> cap = opt_full.map(s->s.toUpperCase());
System.out.println(cap.get()); - filter(),为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装
Optional<String> filter = cap.filter(s->s.length()<6);
System.out.println(filter);
3.总结
Optional类的提供一些便利的方法和lambda表达式使得,在做程序判空时,十分便利,本文只是对optional的方法简要使用Demo。最后汇总待码如下,实在时太简单了,就不放在github了。
补充知识连接:
import java.util.Optional;
public class Optional_Demo {
public static void main(String[] args) {
//of 为非null的值创建一个Optional
Optional<String> opt_full = Optional.of("helloworld");
//ofNullable() 为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
Optional<String> opt_empty = Optional.ofNullable(null);
//isPresent() 如果值存在返回true,否则返回false
System.out.println("opt_full:"+opt_full.isPresent());
System.out.println("opt_empty:"+opt_empty.isPresent());
//full.get() 如果Optional有值则将其返回,否则抛出NoSuchElementException
if(opt_full.isPresent()){
System.out.println("opt_full的内容:"+opt_full.get());
}
//orElse() 如果有值则将其返回,否则返回指定的其它值。
System.out.println(opt_full.orElse("试图修改内容"));
System.out.println(opt_empty.orElse("试图修改内容"));
//map 如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional
Optional<String> cap = opt_full.map(s->s.toUpperCase());
System.out.println(cap.get());
//如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装
Optional<String> filter = cap.filter(s->s.length()<6);
System.out.println(filter);
}
}