java optional_JAVA Optional总结
发布日期:2021-06-24 12:10:23 浏览次数:2 分类:技术文章

本文共 1553 字,大约阅读时间需要 5 分钟。

Optional在JAVA中被定义为一个容器类,更确切的说只存一个元素的容器。

container object which may or may not contain a non-null value.

Optional类结构

Optional属性

Optional类中包含两个属性:

类属性:EMPTY

对象属性:value

EMPTY属性用来存放一个value为null的Optional对象。

value属性用来存放非null对象。

Optional方法

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 static Optional 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://blog.csdn.net/weixin_32661831/article/details/114438690 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java格式化时间博客园_Java 日期格式化工具类
下一篇:java 内存管理 知乎_[知乎]Java 语言的 GC 为什么不实时释放内存?

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月25日 10时55分47秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

电子学会图形化scratch编程等级考试二级真题答案解析(选择题)2020-9 2019-04-28
数据库课程设计 java实现学生信息管理系统 软件开发大作业 2019-04-28
电子学会图形化scratch编程等级考试四级真题答案解析(判断题)2020-12 2019-04-28
Scratch加密/解密 电子学会图形化编程Scratch等级考试四级真题 2020-12 2019-04-28
【蓝桥杯真题11】Scratch季节变化 少儿编程scratch蓝桥杯选拔赛真题讲解 2019-04-28
Scratch画雪花 电子学会图形化编程Scratch等级考试四级真题 2020-12 2019-04-28
初学python100例-案例29 判断回文数 少儿编程案例讲解 2019-04-28
【蓝桥杯真题10】Scratch投球 少儿编程scratch蓝桥杯选拔赛真题讲解 2019-04-28
Scratch绘图优化程序 电子学会图形化编程Scratch等级考试四级真题和答案 2020-12 2019-04-28
Scratch河马带球小游戏 蓝桥杯Scratch国赛真题答案和解析 2019-04-28
Scratch画圆 蓝桥杯Scratch国赛真题答案和解析 2019-04-28
Scratch画圆形螺旋 蓝桥杯Scratch国赛真题答案和解析 2019-04-28
初学python100例-案例30 计算闰年 少儿编程案例讲解 2019-04-28
Scratch螺旋多边形小游戏 蓝桥杯Scratch国赛真题答案和解析 2019-04-28
初学python100例-案例31 输入星期几的第一个字母判断是星期几 少儿编程案例讲解 2019-04-28
初学python100例-案例32 男孩女孩小孩人数 少儿编程案例讲解 2019-04-28
【蓝桥杯真题12】Scratch角色装扮 少儿编程scratch蓝桥杯选拔赛真题讲解 2019-04-28
毕业设计 C#开发实现影院信息管理商城系统 毕业论文【论文+源程序+数据库】 2019-04-28
电子学会图形化scratch编程等级考试二级真题答案解析(判断)2020-9 2019-04-28
scratch别碰红块小游戏 电子学会图形化编程scratch等级考试二级真题和答案解析2020-9 2019-04-28