基础概念

  • java8引入的,java9有加强
  • Google公司出品
  • 旨在更好的处理NullPointException

创建Optional实例和基础使用

Optional op1 = Optional.ofNullable(entity);
Optional op2 = Optional.of(entity);
Optional op3 = Optional.empty();

三种创建方式,要求不能为空、都可以、empty类型的;

基本使用:

op1.get(); //拿到其中的元素
op1.isPresent(); //判断其中非空

既然是对付空指针的,就要有判空的能力。

其他还有

orElse()
orElseGet()
orElseThrow()
filter()
map()
flatMap()
ifPresent()

具体的参考下面博客链接吧,自己用用就熟悉了,何况从字面也能猜个7788

更加正确的使用方式

一句话:正确场景+链式调用

直白的讲, 当我们还在以如下几种方式使用 Optional 时, 就得开始检视自己了

  • 调用 isPresent() 方法时
  • 调用 get() 方法时
  • Optional 类型作为类/实例属性时
  • Optional 类型作为方法参数时

给出逐渐变化的例子如下:

public static String getName(User u) {
if (u == null)
return "Unknown";
return u.name;
} public static String getName(User u) {
Optional<User> user = Optional.ofNullable(u);
if (!user.isPresent())
return "Unknown";
return user.get().name;
} public static String getName(User u) {
return Optional.ofNullable(u)
.map(user->user.name)
.orElse("Unknown");
}

所以,适用场景也比较明显了,我觉得有两种:

  • 多个null判断的,多层嵌套的;
  • 单一null判断的,迅速执行的;

参考博客

【技术累积】【点】【java】【9】Optional的更多相关文章

  1. Java 8 Optional 良心指南,建议收藏

    想学习,永远都不晚,尤其是针对 Java 8 里面的好东西,Optional 就是其中之一,该类提供了一种用于表示可选值而非空引用的类级别解决方案.作为一名 Java 程序员,我真的是烦透了 Null ...

  2. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  3. JAVA 8 Optional类介绍及其源码

    什么是Optional对象 Java 8中所谓的Optional对象,即一个容器对象,该对象可以包含一个null或非null值.如果该值不为null,则调用isPresent()方法将返回true,且 ...

  4. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  5. Java 8 Optional 类

    转自:https://www.runoob.com/java/java8-optional-class.html Optional 类是一个可以为null的容器对象.如果值存在则isPresent() ...

  6. Java中Optional类的使用

    从 Java 8 引入的一个很有趣的特性是 Optional  类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都 ...

  7. Java 8 新特性-菜鸟教程 (6) -Java 8 Optional 类

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

  8. jdk8新特性:在用Repository实体查询是总是提示要java.util.Optional, 原 Inferred type 'S' for type parameter 'S' is not within its bound;

    jdk8新特性:在用Repository实体查询是总是提示要java.util.Optional 在使用springboot 方法报错: Inferred type 'S' for type para ...

  9. java中Optional和Stream流的部分操作

    package test9; import java.util.DoubleSummaryStatistics; import java.util.Optional; import java.util ...

  10. Java 8 Optional In Depth

    OptionalBasicExample.java package com.mkyong; import java.util.Optional; public class OptionalBasicE ...

随机推荐

  1. HDU 2268 How To Use The Car (数学题)

    题目 //做起来很艰辛,总结起来很简单... //注意步行速度可能比车的速度快.... //推公式要仔细,,,, //一道对我来说很搞脑子的数学题,,,,, //车先送第一个人上路,第二个人步行:中途 ...

  2. C#学习笔记_01_基础内容

    01_基础内容 进(位)制 十进制:逢10进1,数字由0-9组成: 二进制:逢2进1,数字由0-1组成: 八进制:逢8进1,数字由0-7组成: 十六进制:逢16进1,数字由0-9和a-f组成: 进制转 ...

  3. Java基本排序算法

    转载来自:https://www.jianshu.com/p/5e171281a387 一遍记住Java常用的八种排序算法与代码实现   1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已 ...

  4. web跨域通信问题解决

    Web页面的跨域问题产生原因是企图使用JS脚本读写不同域的JS作用域.问题根源来自JavaScript的同源策略:出于安全考虑,Javascript限制来自不同源的web页面JS脚本之间进行交互.否则 ...

  5. 洛谷 P1383 codevs 3333 高级打字机

    题目描述 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(t ...

  6. 葵花宝典之机器学习:全网最重要的AI资源都在这里了(大牛,研究机构,视频,博客,书籍,Quora......)

    https://blog.csdn.net/wemedia/details.html?id=42039

  7. DLR概念

    参考文章 动态语言运行时(Dynamic Language Runtime,DLR)是一套基于.NET的类库,它的作用是简化在CLR上开发动态语言的工作,例如DLR中提供了表达式树的创建,代码生成.优 ...

  8. UVA 10159

    http://blog.csdn.net/metaphysis/article/details/6926997 先向作者表达一下敬佩吧,十分巧妙地利用了状态压缩. 这道题有点组合数学的味道,当一个格子 ...

  9. 新建maven web工程报错

    问题: 检查本地仓库: 检查1.0跟release的文件夹: 试试:http://www.ithao123.cn/content-8028507.html 然后选择maven catalog下的:(这 ...

  10. Noip2011瑞士轮题解

    题目背景 在双人对决的竞技性比赛.如乒乓球.羽毛球.国际象棋中.最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少.每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分 ...