【Java】Optional-消失的空指针

前言

作为一名javaer,java.lang.NullPointerException (简称:NPE) 应该是我们最常见的异常之一,为了避免这个问题,通常我们会在可能出现null的地方进行if检测,在某些时候可能造成很深层次的嵌套,导致代码膨胀 (代码数变多) 、可读性变差,维护也变得异常艰难。为了解决这个问题,Java8中引入了Optional类。本章我们将围绕Optional类进行讲解,希望大家通过本章可以对Optional有新的认识!

简介

Optional是一个支持存放泛型类型值的容器对象,其存放的值可以为空,也可以为非空。Optional能通过自身的容器方法判断值是否存在,和获取容器中存放的值。

案例准备

我们准备一个房子(House),房子有门(Door),门包含一个类型(Type),有一个获取类型名称的方法getDoorTypeName

@Data
public class House {
   
   

    private Door door;
    
    public String getDoorTypeName() {
   
   
        return door.getType().getName();
    }

    @Data
    static class Door {
   
   
        private Type type;
    }

    @Data
    static class Type {
   
   
        private String name;
    }
}

NPE演示

获取门的类型名称

public void testNPE(){
   
   
    System.out.println(new House().getDoorTypeName()); // java.lang.NullPointerException
}

if解决NPE

House中增加getOptimizeDoorTypeName方法,方法内部进行为空判断

public String getOptimizeDoorTypeName() {
   
   
    if (door != null) {
   
   
        Type type = door.getType();
        if (type != null) {
   
   
            return type.getName();
        }
    }
    return "未知类型";
}

上述方法存在一个问题,如果属性嵌套层次比较深,一直用if判断,代码可以说是相当膨胀了,对于这个问题,我们赶快请出本文介绍的主人公Optional吧!

Optional使用指南

Optional是一个final修饰的类,不能被继承。打开源码查看你会发现它的构造函数也是私有的,说明我们也不能在外部使用关键字new进行创建,当然Java的设计者不会自绝后路,Optional提供了更加方便的of和ofNullable来进行构建Optional对象!

Optional容器创建方法

  • 创建方法一览表
方法 备注
public static Optional empty() 返回一个空容器,内部值为空
public static Optional of(T value) 根据value创建一个容器,value不允许为空,如果为空抛出NPE异常
public static Optional ofNullable(T value) 根据value创建一个容器,value为空等同于empty()、不为空等同于of()
  • 代码演示
public void testOptional(){
   
   
    Optional<House> houseEmpty = Optional.empty();
    Optional
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值