API文档:https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html

  • https://www.runoob.com/java/java8-optional-class.html
  • https://blog.csdn.net/qq_40794973/article/details/86882454#t60
  • 臭名昭著的空指针异常是导致Java应用程序失败的最常见原因;以前为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码;受到Google Guava的启发Optional类已经成为Java 8类库的一部分
  • Optional实际上是个容器,它可以保存类型T的值,或者仅仅保存null,Optional提供很多有用的方法,这样我们就不用显式进行空值检测
  • Optional类的Javadoc描述如下:这是一个可以为null的容器对象,如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象;
  • Optional<T> 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional可以更好的表达这个概念,并且可以避免空指针异常
// import lombok.Data;
@Data
public class User {private Address address;public User(){}public User(Address address){this.address = address;}
}
@Data
public class Country {private String isoCode;public Country(){}public Country(String isoCode){this.isoCode = isoCode;}
}
@Data
public class Address {private Country country;public Address(){}public Address(Country country) {this.country = country;}
}
public class Main {public static void main(String[] args) {Country country = new Country("hehe");Address address = new Address(country);User user = new User(address);String isoCode = user.getAddress().getCountry().getIsoCode().toUpperCase();System.out.println("isoCode => " + isoCode);System.out.println("isoCode => " + getIsoCode(user));//isoCode => HEHE//isoCode => HEHE}public static String getIsoCode(User user) {String isoCode = null;if (user != null) {Address address = user.getAddress();if (address != null) {Country country = address.getCountry();if (country != null) {isoCode = country.getIsoCode();if (isoCode != null) {isoCode = isoCode.toUpperCase();}}}}return isoCode;}
}
类方法
方法  描述
<T> Optional<T> empty() 创建一个空的Optional实例
<T> Optional<T> of(T value) 创建一个指定非null值的Optional实例
<T> Optional<T> ofNullable(T value) value不为 null,创建Optional 实例,否则创建空实例
isPresent() 如果值存在则方法会返回true,否则返回 false
T get() 如果调用对象包含值,返回该值,否则抛异常
T orElse(T other) 如果调用对象包含值,返回该值,否则返回other
T orElseGet(Supplier<? extends T> other) 如果调用对象包含值,返回该值,否则触发 other,并返回 other 调用的结果
map(Function<? super T, ? extends U> mapper) 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
flatMap(Function<? super T, Optional<U>> mapper) 与 map 类似,要求返回值必须是Optional
@Test
public void testOf(){Optional<Object> op = Optional.of(new Object());Object obj = op.get();System.out.println(obj);
}
@Test
public void test() {//Optional<Object> op = Optional.of(null); // 这样是不可以的,这样可以以最快的速度定位异常//有的时候我就想构建一个空的Optional的Optional<Object> op2 = Optional.empty();System.out.println(op2.get());//ofNullable 是另外两个的综合//public static <T> Optional<T> ofNullable(T value) {//     return value == null ? empty() : of(value);//}Optional<Object> op3 = Optional.ofNullable(null);System.out.println(op3.get());
}
@Test
public void test() {Pair<String, String> user = null;//new Pair<>("name", "卢本伟");Optional<Pair<String, String>> op = Optional.ofNullable(user);if (op.isPresent()) {System.out.println(op.get());}Pair emp = op.orElse(new Pair<>("name", "乔碧萝"));System.out.println(emp);//和上面的相比,这个可以添加判断Object emp2 = op.orElseGet(() -> new Pair<>("name", "蔡徐坤"));System.out.println(emp2);
}
@Test
public void test() {Optional<Pair<String, String>> op = Optional.of(new Pair<>("name", "卢本伟"));Optional<String> op2 = op.map(Pair::getValue);System.out.println(op2.get());//进一步避免异常Optional<String> op3 = op.flatMap((user) -> Optional.of(user.getValue()));System.out.println(op3.get());
}

https://www.cnblogs.com/zhangboyu/p/7580262.html

java.util.Optional相关推荐

  1. java = 优化_Java9系列第7篇:Java.util.Optional优化与增强 - 字母哥博客 - 博客园

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

  2. Spring 4.1和Java 8:java.util.Optional

    由于Spring 4.1的Java 8的的java.util.Optional ,容器对象可能会或可能不包含非空值,支持与@RequestParam , @RequestHeader和@MatrixV ...

  3. Java 8 中的 java.util.Optional

    Java 8 中的 java.util.Optional 学习了:https://blog.csdn.net/sun_promise/article/details/51362838 package ...

  4. 使用Java 8 Optional避免空指针异常

    2019独角兽企业重金招聘Python工程师标准>>> Optional可以让你的代码具有可读性,且会避免出现空指针异常. 都说没有遇到过空指针异常的程序员不是Java程序员,nul ...

  5. Java 8 - Optional全解

    文章目录 在Optional出现之前经常遇到的空指针异常 采用防御式减少NullPointerException (深度质疑) null-安全的第二种尝试(过多的退出语句) Optional的介绍以及 ...

  6. Java 8 Optional 类

    Java 8 Optional 类  Java 8 新特性 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. ...

  7. java 8 optional 类,Java8新特性-Optional类

    Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念.并且可以避免空指 ...

  8. 【Java】Optional容器

    说明 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者 ...

  9. Java 8 Optional 类 学习

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/62216945 1. Optional类的简介 ...

最新文章

  1. spring 基于XML的申明式AspectJ通知的执行顺序
  2. Mybatis获取插入记录的自增长ID
  3. Apache Spark Jobs 性能调优
  4. python【力扣LeetCode算法题库】169 多数元素
  5. 基于Python——实现远程下载sftp文件(只下载.zip文件)
  6. 前缀、中缀和后缀表达式详解,中缀表达式到后缀表达式的转换规则,以及后缀表达式的计算规则,附计算代码
  7. App-V 4.6 SP1系列之五包加速器的制作
  8. 如何在SAP Spartacus category 页面里拿到当前的category信息
  9. mysql的DbUtils_Dbutils操作mysql
  10. Win10 安装 VS2015 失败解决办法
  11. Linq 操作XML文件
  12. 魔都上海为什么被称为“魔都”
  13. 6-3 图片合成视频
  14. Ubuntu 18.04 安装 NVIDIA 显卡驱动超详细步骤
  15. python练习:重命名大量图片
  16. Unity3D做的DEMO
  17. 电脑新建文件夹快捷键
  18. 微信小程序全国巡回沙龙杭州站-芋头演讲详细内容及PPT
  19. 【Unity3D】枪战游戏—弹孔设置
  20. OpenCV-PS羽化操作

热门文章

  1. RRT、RRT-connect、RRT*等算法、A*等等路径规划算法
  2. 扫码枪(条码枪)v1.0可以实现无焦点捕获扫码输入,并可上传数据到服务器
  3. 如何把项目部署到腾讯云服务器(附带常见错误)
  4. Slf4j之MDC机制
  5. 跑步听歌用哪种耳机更合适、适合跑步专业的耳机推荐
  6. 【Web UI自动化测试】Web UI自动化测试之日志收集篇(全网最全)
  7. javaSE - 逻辑控制和输入输出(复习)
  8. Java操作Excel 并 保存新Excel
  9. Java 比较字符串之间大小
  10. 【论文学习】《Generalized End-to-End Loss for Speaker Verification》