JAVA8之Optional类代替 != null 判空

本文介绍了JAVA8的Optional类如何替代 != null 检查以避免NullPointerException。讲解了Optional的API,包括of(), ofNullable(), orElse(), orElseGet(), orElseThrow(), map(), flatMap(), isPresent(), ifPresent()和filter()等方法的使用,并通过实战示例展示了Optional在函数方法和主程序中的应用。" 73730244,5661160,Zero-Shot Learning的多线索嵌入方法解析,"['机器学习', '迁移学习', '图片分类', 'CVPR', '无监督学习']
摘要由CSDN通过智能技术生成

引言

在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示

在这种情况下,有如下代码:

user.getAddress().getProvince();

这种写法,在user为null时,是有可能报NullPointerException异常的。为了解决这个问题,于是采用下面的写法:

if(user!=null){
      Address address = user.getAddress();    if(address!=null){
          String province = address.getProvince();    }}

这种写法是比较丑陋的,为了避免上述丑陋的写法,让丑陋的设计变得优雅。JAVA8提供了Optional类来优化这种写法,接下来的正文部分进行详细说明

API介绍

先介绍一下API,与其他文章不同的是,本文采取类比的方式来讲,同时结合源码。而不像其他文章一样,一个个API罗列出来,让人找不到重点。

1、Optional(T value),empty(),of(T value),ofNullable(T value)

这四个函数之间具有相关性,因此放在一组进行记忆。

先说明一下,Optional(T value),即构造函数,它是private权限的,不能由外部调用的。其余三个函数是public权限,供我们所调用。那么,Optional的本质,就是内部储存了一个真实的值,在构造的时候,就直接判断其值是否为空。好吧,这么说还是比较抽象。直接上Optional(T value)构造函数的源码,如下图所示

那么,of(T value)的源码如下:

public static <T> Optional<T> of(T value) {
      return new Optional<>(value);}​​​​​​

也就是说of(T value)函数内部调用了构造函数。根据构造函数的源码我们可以得出两个结论:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值