日常学习收货——Optional 类

2024-03-16 02:10
文章标签 学习 日常 optional 收货

本文主要是介绍日常学习收货——Optional 类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天学习同事的代码,好吧就是新员工为了尽快的跟上节奏。没事的我就看别人写的代码。发现了一个新的类 optional.

本着好奇的心理,瞧瞧这个类的作用。

这个类是专门针对空指针异常整出来的。有点意思。

介绍一下这个类的起源,吃水不忘挖井人

为了解决空指针异常的问题,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序猿写更干净的代码。收到Google Guava项目的启发,Optional类已经成为Java 8类型库的一部分。

加到java类库之后,描述是这样的

A container object which may or may not container a non_null value.If a value is present, isPresent() will return true and get() will Return the value.

(这是一个可以为null的容器对象,如果值存在则isPresent()方法会返回true,调用get()方法会返回其值)

举个小例子吧;

String address = user.getCountry().getCity().getAddress().toString();

要获取用户的地址,存在级联关系的话 如果国家或者城市为空都会报空指针。

所以我们一般不会这么写,

if(user != null){

      Country country = user.getCountry();

      if(country != null){

            City city = country.getCity();

            if(city != null){

                  address = city.getAddress().toString();

            }

      }

}

这样的写法复杂,有繁琐。想简单的写吧,有存在空指针异常的问题。

我们可以来试试Optinal的写法

Optional<String> opt = Optional.ofNullable(user.getCountry().getCity().getAddress().toString());

If(opt.isPsent()){

      String address = opt.get();

}

(注意,接收类型需要和传入类型一致)

这样是不是就简单了很多了

在我简单的测试中发现new HashMap<String,Objet>(),也是一样属于有值的

这里我们发先c 的是肯定是不存在的,走了false的方法。如果我们在这里一定要去获取C的值呢? 又会是一个什么样的情况?

我调整了一下 b 与 c的位置  看来还是不能去强行获取的。如果我插入一个值为null 又是什么情况呢?

Null值在这里算不存在的? 石锤了  ,总之我们的目的是达到了,简写了很多代码,规避了空指针的情况。

接下来,我们看看Optional提供的API

第一个,orElse();

不多说上图

如果有值则返回该值,否则返回它的参数值。途中的map2是null所以返回的是map的值。至于为啥我会写一个map1 大家可以去试试

接下来看第二个 orElseGet()

没有值的时候,都执行后面的方法,那么在有值的时候呢?

orElse()方法依旧执行了createNewMap()的方法,但是orElseGet()却没有。所以他们两者之间还是有一定的区别的。

测试的demo写的很low 大佬们留情。

后面还有一些还测试的API 就不全部介绍了,一味的看demo是没有任何用的 需要自己去动手实验。

 

----------------------------------------------------------------------------------------------------------------------------------------------

最近在工作中还是发现了一些问题,补充一下,上面的漏洞

Optional<String> opt = Optional.ofNullable(user.getCountry().getCity().getAddress().toString());

如果user.getCountry() 这个的值就是一个空了,那么即使用了Optional。也一样用报错。

 

 

老规矩附录一下大佬们的文章地址:https://www.cnblogs.com/zhangboyu/p/7580262.html

https://blog.csdn.net/dylgs314118/article/details/101015690

这篇关于日常学习收货——Optional 类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/813963

相关文章

Java 中 Optional 的用法及最佳实践

《Java中Optional的用法及最佳实践》在Java开发中,空指针异常(NullPointerException)是开发者最常遇到的问题之一,本篇文章将详细讲解Optional的用法、常用方... 目录前言1. 什么是 Optional?主要特性:2. Optional 的基本用法2.1 创建 Opti

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio