博客
关于我
Optional类
阅读量:772 次
发布时间:2019-03-23

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

Java Optional类核心教程

Java Optional类概述

PortableNSObject Java的Optional类被设计用于处理那些可以为空的对象,而不用担心空指针异常。它的设计理念类似于"Maybe"或"Optional"概念,在很多编程语言中都能找到对应的实现。

女孩类的结构简单明了,只有一个属性name。

package com.atguigu.java4;public class Girl {    private String name;    //其他方法...}

男孩类与女孩类有一定的关联关系,通过setGirl和getGirl方法实现对应关系.

package com.atguigu.java4;public class Boy {    private Girl girl;    //其他方法...}

Optional类方法解析

Optional类主要提供了以下几种方法:

  • of(T t): 创建一个Optional实例,输入必须非空
  • empty(): 创建一个空的Optional实例
  • ofNullable(T t): 输入可以是null
  • orElse(T t1): 如果当前Optional不为空,则返回内部对象;否则返回t1

OptionalTest测试案例

以下是使用Optional类的几个典型示例:

测试1

@Testpublic void test1() {    Girl girl = new Girl();    Optional Gögirl = Optional.of(girl);}

测试2

@Testpublic void test2() {    Girl girl = new Girl();    Optional Gögirl = Optional.ofNullable(girl);    System.out.println(Gögirl);        Girl girl1 = Ögirl.orElse(new Girl("赵丽颖"));    System.out.println(girl1);}

完善后的getGirlName方法

public String getGirlName(Boy boy) {    if (boy != null) {        Girl girl = boy.getGirl();        if (girl != null) {            return girl.getName();        }    }    return null;}

测试优化版本

@Testpublic void test4() {    Boy boy = null;    String girlName = getGirlName1(boy);    System.out.println(girlName);}

第二种实现方法

public String getGirlName2(Boy boy) {    Optional Boy boyOptional = Optional.ofNullable(boy);    Boy boy1 = boyOptional.orElse(new Boy(new Girl("迪丽热巴")));        Girl girl = boy1.getGirl();    Optional Girl girlOptional = Optional.ofNullable(girl);    Girl girl1 = girlOptional.orElse(new Girl("古力娜扎"));    return girl1.getName();}

最终测试案例

@Testpublic void test5() {    Boy boy = null;    boy = new Boy(new Girl("苍老师"));    String girlName = getGirlName2(boy);    System.out.println(girlName);}

总结

通过以上案例可以看出,Java Optional类的设计极大地简化了代码编写和理解,同时有效避免了空指针异常的问题。在实际开发中,可以通过Optional来更安全地处理可能为空的对象,提高代码的健壮性和可读性。

转载地址:http://bgtzk.baihongyu.com/

你可能感兴趣的文章
python3.6.5+cuda9+cudnn7.1+win10+tensorflow-gpu1.9.0下载配置
查看>>
python3.6使用pickle序列化class
查看>>
python3.6入门到高阶(全栈) day027 网络通信协议 osi七层模型
查看>>
Python3.6属性错误:模块‘;异步没有属性‘;运行‘;
查看>>
python3.6版本中的python-weka-wrapper安装失败,错误代码为%1
查看>>
Python3.7安装cv2踩过的坑
查看>>
python写txt文件
查看>>
python关于sorted排序函数详细解析 附实战代码(全)
查看>>
python3.8调用m文件,调用matlab
查看>>
python3.9新特性_Python 3.9 新特性速览
查看>>
Python3.x:遍历select下拉框获取value值
查看>>
python360百科_11月编程排行榜:Python超过Java成第二
查看>>
Python关于Paginator分页函数详细解析 附实战代码
查看>>
python3、ipython3、setup-tools、pip等环境搭建详细总结
查看>>
python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片
查看>>
python3与django中@property详解
查看>>
python3中如何表示无穷大
查看>>
Python3中提示:no module named 'wxpy'
查看>>
python3中选择文件对话框的格式打开和保存图片
查看>>
python3为什么print永远都是地址_Python3 print 函数用法总结
查看>>