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

本文共 1883 字,大约阅读时间需要 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

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

测试2

@Test
public 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;
}

测试优化版本

@Test
public 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();
}

最终测试案例

@Test
public 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/

你可能感兴趣的文章
Netty常见组件二
查看>>
netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
查看>>
Netty核心模块组件
查看>>
Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
查看>>
Netty源码—2.Reactor线程模型一
查看>>
Netty源码—4.客户端接入流程一
查看>>
Netty源码—4.客户端接入流程二
查看>>
Netty源码—5.Pipeline和Handler一
查看>>
Netty源码—6.ByteBuf原理二
查看>>
Netty源码—7.ByteBuf原理三
查看>>
Netty源码—7.ByteBuf原理四
查看>>
Netty源码—8.编解码原理二
查看>>
Netty源码解读
查看>>
Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
查看>>
Netty相关
查看>>
Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
查看>>
Network Sniffer and Connection Analyzer
查看>>
NetworkX系列教程(11)-graph和其他数据格式转换
查看>>
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>
Net与Flex入门
查看>>