Java8新特性Optional类

介绍

到目前为止,臭名昭著的空指针异常是导致 Java 应用程序失败的最常见原因。 以前,为了解决空指针异常,Google 公司著名的 Guava 项目引入了 Optional 类, Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代 码。受到Google Guava 的启发, Optional 类已经成为 Java 8 类库的一部分。
Optional<T> (java.util.Optional) 是一个容器类,它可以保存类型 T 的值,代表 这个值存在。或者仅仅保存null ,表示这个值不存在。原来用 null 表示一个值不 存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
Optional 类的 Javadoc 描述如下:这是一个可以为 null 的容器对象。如果值存在 则isPresent() 方法会返回 true ,调用 get() 方法会返回该对象。

方法

Optional 提供很多有用的方法,这样我们就不用显式进行空值检测。
创建 Optional 类对象的方法:
Optional.of(T t) : 创建一个 Optional 实例, t 必须非空
Optional.empty() : 创建一个空的 Optional 实例
Optional.ofNullable(T t) t 可以为 null
判断 Optional 容器中是否包含对象:
boolean isPresent() : 判断是否包含对象
void ifPresent(Consumer<? super T> consumer) 如果有值,就执行 Consumer
接口的实现代码,并且该值会作为参数传给它。
获取 Optional 容器的对象:
T get(): 如果调用对象包含值,返回该值,否则抛异常
T orElse(T other) 如果有值则将其返回,否则返回指定的 other 对象。
T orElseGet(Supplier<? extends T> other) 如果有值则将其返回,否则返回由
Supplier 接口实现提供的对象。
T orElseThrow(Supplier<? extends X> exceptionSupplier) 如果有值则将其返
回,否则抛出由 Supplier 接口实现提供的异常。

代码

之前我们在介绍Java8新特性的时候创建过一个Employee类

 

package com.csdn.test;

import com.csdn.entity.Employee;
import org.junit.Test;

import java.util.Optional;

/**
 * @author summer
 * @date 2022-04-18  14:50
 */
public class TestOptional {

    @Test
    public void test(){
//        此方法创建的实例传入的参数不能为空
        Optional<Employee> employee = Optional.of(new Employee());
        System.out.println(employee);
//        employee = Optional.of(null); 空指针异常
//        System.out.println(employee);

        //方法参数可以为空
        Optional<Employee> employee1 = Optional.ofNullable(new Employee());
        System.out.println(employee1);
        //判断是否包含对象
        System.out.println(employee1.isPresent());
        employee1 = Optional.ofNullable(null);
        System.out.println(employee1);//Optional.empty
       // System.out.println(employee1.get());//java.util.NoSuchElementException: No value present
        System.out.println(employee1.isPresent());



    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java8Optional是一个容器对象,可以包含null或非null值。它提供了一种优雅的方式来处理null值,避免了NullPointerException异常的出现。Optional可以用于返回值、方法参数和实例变量等场景,使代码更加简洁、清晰和安全。使用Optional可以使代码更加健壮,减少了代码的null检查和异常处理,提高了代码的可读性和可维护性。 ### 回答2: OptionalJava 8新引入的一个,它的主要作用是在避免NullPointerException的情况下将null值返回给调用者。这个是一个容器对象,它可以保存非空的对象,也可以保存空值(null)。 Optional提供了通过判断一个对象是否为空来避免空指针异常的方式。它可以在代码替换传统的null判断,这样可以更加方便地编写代码,并且可以使代码更加健壮。 在Java,如果一个方法返回值为null,那么在调用该方法返回值的时候,会有可能抛出NullPointerException异常。而Optional的出现可以帮助我们避免这种情况的出现,在调用Optional的get()方法时,如果Optional保存的对象不为null,就会返回该对象,否则抛出一个NoSuchElementException异常。 Optional还提供了一些方法来简化代码,比如orElse()方法,如果Optional保存的对象不为null,则返回该对象,否则返回指定的default值。还有ifPresent()方法,当Optional保存的对象不为null时,会执行指定的代码,否则不执行。 总之,OptionalJava 8一个很有用的,它可以帮助我们更加方便地处理null值,避免空指针异常的出现,并且可以简化代码。但是需要注意的是,不应该滥用Optional,因为它并不是完美的解决方案,有时候需要对null值进行特殊处理。 ### 回答3: Java 8在语言层面上增加了一个新的Optional。这是一个特殊的容器对象,可以包含一个null或非null的值。 Optional的目的是解决Java的null引用问题。在Java,如果一个变量被赋值为null,而我们试图调用该变量所对应的方法,那么就会出现NullPointerException异常。 使用Optional可以避免这种情况的发生。如果一个变量是Optional对象,那么我们必须显式地检查该对象是否包含非null的值,才能对其进行操作。这样,在我们试图调用该变量所对应的方法之前,就可以避免空指针异常的发生。 Optional提供了很多方法来判断是否有值、获取值、如果没有值则返回默认值等等,使得我们可以更加方便地处理空值。 下面是一些Optional提供的方法: 1. Optional.of(T value):创建一个包含非null值的Optional对象,如果T为null,则抛出NullPointerException异常。 2. Optional.ofNullable(T value):创建一个Optional对象,如果T为null,则该对象为空。 3. Optional.empty():创建一个空的Optional对象。 4. get():如果值存在,则返回该值,否则抛出异常。 5. orElse(T other):如果值存在,则返回该值,否则返回其他默认值。 6. isPresent():返回一个boolean型的值,表示Optional对象是否包含值。 7. ifPresent(Consumer<? super T> consumer):如果该Optional对象包含值,则对该值执行给定的操作。 在编写Java程序时,我们应该始终努力避免使用null值。使用Optional,可以使得我们的代码更加健壮、可读性更强。但是,过多地使用Optional可能会导致代码过于冗长,所以在使用的过程需要权衡利弊。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢编程的夏先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值