摘要:在中被定义为一个容器类,更确切的说只存一个元素的容器。类结构属性类中包含两个属性类属性对象属性属性用来存放一个为的对象。提高编码人员对对象重视以及对象时的特殊处理。个人觉得没有实质性杜绝问题,造成的主要原因是数据不完整性。
Optional在JAVA中被定义为一个容器类,更确切的说只存一个元素的容器。
Optional类结构 Optional属性container object which may or may not contain a non-null value.
Optional类中包含两个属性:
类属性:EMPTY
对象属性:value
EMPTY属性用来存放一个value为null的Optional对象。
value属性用来存放非null对象。
Optional的有两个构造方法,都被private修饰。
private Optional() { this.value = null; } private Optional(T value) { this.value = Objects.requireNonNull(value); }
无参构造方法用来初始化EMPTY。有参构造方法用来初始化非null对象。
因为构造方法被修饰为私有的,Optional想要实例化对象只能通过类方法调用。Optional提供三个类方法。
empty:返回value为null的Optional对象
of:返回value非null的Optional对象
ofNullable:value的值根据参数是否为null返回对应的Optional对象
public staticOptional empty() { Optional t = (Optional ) EMPTY; return t; } public static Optional of(T value) { return new Optional<>(value); } public static Optional ofNullable(T value) { return value == null ? empty() : of(value); }
实例方法介绍
方法 | 参数类型 | 返回类型 | 说明 | |
---|---|---|---|---|
get | 无 | T | value为null抛出NoSuchElementException异常 | |
isPresent | 无 | boolean | value为null则返回false | |
ifPresent | Consumer super T> | void | 如果Optional实例有值则为其调用consumer,否则不做处理 | |
filter | Predicate super T> | Optional |
如果值存在并且满足提供的谓词,就返回包括该值的Optional对象;否则返回一个空的Optional对象 | |
map | Function super T, ? extends U> | Optional | 如果值存在,就对该值执行提供的mapping函数调用,返回Optional对象 | |
flatMap | Function super T, Optional> | Optional | 如果值存在,就对该值执行提供的mapping函数调用,返回非null Optional对象 | |
orElse | T | T | 如果有值则将其返回,否则返回一个默认值 | |
orElseGet | Supplier extends T> | T | 如果有值则将其返回,否则返回一个由指定的Supplier接口生成的值 | |
orElseThrow | Supplier extends X> | 如果有值则将其返回,否则抛出一个由指定的Supplier接口生成的异常 |
Optional类为我们做了什么呢?
代码中可以省去了ifelse对null对象的判断。
提高编码人员对null对象重视以及null对象时的特殊处理。
个人觉得Optional没有实质性杜绝NPE问题,造成NullPointerException的主要原因是数据不完整性。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70728.html
摘要:在目前的工作中,我对中的和表达式都使用得很多,之前也写了两篇文章来总结对应的知识。为了避免,他们会加很多判断语句,使得代码的可读性变得很差。在后面的开发中,可以使用设计,这样可以设计出更安全的接口和方法。 showImg(https://upload-images.jianshu.io/upload_images/44770-dfeb2d48d3779723.jpg?imageMogr...
摘要:实践很简单的一个类,点开它的源代码,其中所有的方法都是与相关联的。从而很好地避免了空指针异常。方法,如果存在,返回包含的值,否则抛出异常。随便点开一个方法,都会在第一行为不该为的参数进行判断。 问题描述 在大热的Spring Boot 2.0中,在将原来的泛型改为了Optional,旨在让我们的代码更简洁。 showImg(https://segmentfault.com/img/bV...
摘要:本文已收录修炼内功跃迁之路的为解决空的问题带来了很多新思路,查看源码,实现非常简单,逻辑也并不复杂。 本文已收录【修炼内功】跃迁之路 showImg(https://segmentfault.com/img/bVbrCvp?w=852&h=480); Java8的Optional为解决空的问题带来了很多新思路,查看Optional源码,实现非常简单,逻辑也并不复杂。Stuart Ma...
摘要:函数副作用会给程序设计带来不必要的麻烦,引入潜在的,并降低程序的可读性。所以只能采用这种曲线救国的方式。则是把这种曲线救国拿到了台面上,并昭告天下,同时还对提供了一些语法支持。是自由变量,提供执行上下文,触发闭包执行。 背景 自从2013年放弃了Java就再也没有碰过。期间Java还发布了重大更新:引入lambda,但是那会儿我已经玩了一段时间Scala,对Java已经瞧不上眼。相比S...
阅读 3541·2021-09-24 09:48
阅读 1043·2021-09-10 10:51
阅读 3245·2019-08-30 13:03
阅读 3277·2019-08-30 12:51
阅读 1366·2019-08-30 11:22
阅读 1018·2019-08-29 18:38
阅读 2012·2019-08-29 16:41
阅读 3089·2019-08-29 15:32