java.util.Optional
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相关推荐
- java = 优化_Java9系列第7篇:Java.util.Optional优化与增强 - 字母哥博客 - 博客园
我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...
- Spring 4.1和Java 8:java.util.Optional
由于Spring 4.1的Java 8的的java.util.Optional ,容器对象可能会或可能不包含非空值,支持与@RequestParam , @RequestHeader和@MatrixV ...
- Java 8 中的 java.util.Optional
Java 8 中的 java.util.Optional 学习了:https://blog.csdn.net/sun_promise/article/details/51362838 package ...
- 使用Java 8 Optional避免空指针异常
2019独角兽企业重金招聘Python工程师标准>>> Optional可以让你的代码具有可读性,且会避免出现空指针异常. 都说没有遇到过空指针异常的程序员不是Java程序员,nul ...
- Java 8 - Optional全解
文章目录 在Optional出现之前经常遇到的空指针异常 采用防御式减少NullPointerException (深度质疑) null-安全的第二种尝试(过多的退出语句) Optional的介绍以及 ...
- Java 8 Optional 类
Java 8 Optional 类 Java 8 新特性 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. ...
- java 8 optional 类,Java8新特性-Optional类
Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念.并且可以避免空指 ...
- 【Java】Optional容器
说明 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者 ...
- Java 8 Optional 类 学习
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/62216945 1. Optional类的简介 ...
最新文章
- spring 基于XML的申明式AspectJ通知的执行顺序
- Mybatis获取插入记录的自增长ID
- Apache Spark Jobs 性能调优
- python【力扣LeetCode算法题库】169 多数元素
- 基于Python——实现远程下载sftp文件(只下载.zip文件)
- 前缀、中缀和后缀表达式详解,中缀表达式到后缀表达式的转换规则,以及后缀表达式的计算规则,附计算代码
- App-V 4.6 SP1系列之五包加速器的制作
- 如何在SAP Spartacus category 页面里拿到当前的category信息
- mysql的DbUtils_Dbutils操作mysql
- Win10 安装 VS2015 失败解决办法
- Linq 操作XML文件
- 魔都上海为什么被称为“魔都”
- 6-3 图片合成视频
- Ubuntu 18.04 安装 NVIDIA 显卡驱动超详细步骤
- python练习:重命名大量图片
- Unity3D做的DEMO
- 电脑新建文件夹快捷键
- 微信小程序全国巡回沙龙杭州站-芋头演讲详细内容及PPT
- 【Unity3D】枪战游戏—弹孔设置
- OpenCV-PS羽化操作
热门文章
- RRT、RRT-connect、RRT*等算法、A*等等路径规划算法
- 扫码枪(条码枪)v1.0可以实现无焦点捕获扫码输入,并可上传数据到服务器
- 如何把项目部署到腾讯云服务器(附带常见错误)
- Slf4j之MDC机制
- 跑步听歌用哪种耳机更合适、适合跑步专业的耳机推荐
- 【Web UI自动化测试】Web UI自动化测试之日志收集篇(全网最全)
- javaSE - 逻辑控制和输入输出(复习)
- Java操作Excel 并 保存新Excel
- Java 比较字符串之间大小
- 【论文学习】《Generalized End-to-End Loss for Speaker Verification》