🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 简介 解决空指针异常的 `Optional<T>` 实际上是个容器: 它可以保存类型T的值,或者仅仅保存null. Optional提供很多有用的方法,这样我们就不用显示进行空值检测. 这是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()返回该对象 ![](https://img.kancloud.cn/fe/07/fe0723708b180375ae58e712b568d792_733x378.png) # 常用方法 ~~~ Optional.of(T t) : 创建一个 Optional 实例 Optional.empty() : 创建一个空的 Optional 实例 Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例 isPresent() : 判断是否包含值 T get(): 如果调用对象包含值,返回该值,否则抛异常 orElse(T t) : 如果调用对象包含值,返回该值,否则返回t orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值 map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty() flatMap(Function mapper):与 map 类似,要求返回值必须是Optional ~~~ # 例子 ~~~ //返回一个没有封装任何数据的Optional对象 // Optional<Object> op = Optional.empty(); // System.out.println(op); // // //isPresent():判断内部的数据是否存在 // if(op.isPresent()){ // //get():返回Optional对象内部封装的数据 // System.out.println(op.get()); // }else{ // System.out.println("内部木有数据"); // } System.out.println("**********************"); //of(T t):当t为null时,报异常。建议不用此方法 Optional<String> op = Optional.of("beijing"); // Optional<String> op = Optional.of(null); System.out.println(op); //isPresent():判断内部的数据是否存在 if(op.isPresent()){ //get():返回Optional对象内部封装的数据 System.out.println(op.get()); }else{ System.out.println("内部木有数据"); } System.out.println("**********************"); // Optional<String> op1 = Optional.ofNullable("beijing"); Optional<String> op1 = Optional.ofNullable(null); System.out.println(op1); //isPresent():判断内部的数据是否存在 if(op1.isPresent()){ //get():返回Optional对象内部封装的数据 System.out.println(op1.get()); }else{ // System.out.println("内部木有数据"); //orElse(T t):如果调用对象包含值,返回该值,否则返回t String str = op1.orElse("atguigu"); System.out.println(str); } System.out.println("**********************"); //总结:"beijing"位置的对象如果不为空,则返回此对象。如果为空,返回"shanghai"对应的对象。 //进而,通过使用Optional能够规避空指针的异常。 Optional<String> op2 = Optional.ofNullable("beijing"); String str1 = op2.orElse("shanghai"); System.out.println(str1); ~~~ ~~~ Optional<Man> op = Optional.ofNullable(man); Man man1 = op.orElse(new Man(new Girl("佟老师")));//man1一定是非空的 Girl girl = man1.getGirl(); Optional<Girl> op1 = Optional.ofNullable(girl); Girl girl1 = op1.orElse(new Girl("苍老师"));//girl1一定是非空的 return girl1.getName(); ~~~