MST

星途 面试题库

面试题:Java中Optional类如何避免空指针异常

在Java中,描述一下Optional类的基本用法,举例说明如何使用Optional类来优雅地处理可能为空的对象,以避免常见的空指针异常。
13.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

Optional类基本用法

Optional类是Java 8引入的,用于解决空指针异常(NullPointerException)问题。它本质上是一个容器类,可能包含也可能不包含非空值。

常用方法

  1. 创建Optional实例
    • Optional.of(T value):创建一个包含指定非空值的Optional实例。如果valuenull,会抛出NullPointerException
    • Optional.ofNullable(T value):创建一个可能包含null值的Optional实例。如果valuenull,则创建的Optional实例不包含值。
    • Optional.empty():创建一个不包含值的Optional实例。
  2. 检查值是否存在
    • boolean isPresent():判断Optional是否包含值。
  3. 获取值
    • T get():如果Optional包含值,则返回该值,否则抛出NoSuchElementException
    • T orElse(T other):如果Optional包含值,则返回该值,否则返回指定的other值。
    • T orElseGet(Supplier<? extends T> other):如果Optional包含值,则返回该值,否则调用Supplier获取并返回一个值。
    • T orElseThrow(Supplier<? extends X> exceptionSupplier):如果Optional包含值,则返回该值,否则抛出由exceptionSupplier提供的异常。
  4. 处理值
    • void ifPresent(Consumer<? super T> consumer):如果Optional包含值,则对该值执行Consumer中的操作。

示例代码

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        // 假设这是可能为空的对象
        String name = null;

        // 使用Optional.ofNullable创建Optional实例
        Optional<String> optionalName = Optional.ofNullable(name);

        // 1. 使用orElse方法提供默认值
        String result1 = optionalName.orElse("default name");
        System.out.println(result1);

        // 2. 使用orElseGet方法根据Supplier提供默认值
        String result2 = optionalName.orElseGet(() -> "default name from Supplier");
        System.out.println(result2);

        // 3. 使用ifPresent方法处理值
        optionalName.ifPresent(n -> System.out.println("The name is: " + n));

        // 4. 使用orElseThrow方法在值不存在时抛出异常
        try {
            String result3 = optionalName.orElseThrow(() -> new RuntimeException("Name is not present"));
            System.out.println(result3);
        } catch (RuntimeException e) {
            System.out.println(e.getMessage());
        }
    }
}

在上述示例中,通过Optional类的不同方法,优雅地处理了可能为空的name对象,避免了空指针异常。