JDK1.8新特性 Optional 类的使用

发布于:2024-04-24 ⋅ 阅读:(25) ⋅ 点赞:(0)

Optional 类是 Java 8 中引入的一个用于解决空指针异常问题的工具类。它可以包含或不包含非空值,并提供了一系列方法来处理可能为空的值。以下是一个详细的介绍和示例代码

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        // 创建一个包含非空值的Optional
        Optional<String> optionalWithValue = Optional.of("Hello, world!");
        System.out.println("Optional with value: " + optionalWithValue); // Optional with value: Optional[Hello, world!]

        // 创建一个空的Optional
        Optional<String> optionalEmpty = Optional.empty();
        System.out.println("Empty Optional: " + optionalEmpty); // Empty Optional: Optional.empty

        // 使用ofNullable方法创建一个Optional,允许值为null
        String nullableValue = null;
        Optional<String> optionalNullable = Optional.ofNullable(nullableValue);
        System.out.println("Nullable Optional: " + optionalNullable); // Nullable Optional: Optional.empty

        // 检查Optional是否包含值
        if (optionalWithValue.isPresent()) {
            System.out.println("Optional with value is present."); // Optional with value is present.
        } else {
            System.out.println("Optional with value is empty.");
        }

        // 获取Optional中的值,如果存在
        if (optionalWithValue.isPresent()) {
            String value = optionalWithValue.get();
            System.out.println("Value in optional: " + value); // Value in optional: Hello, world!
        }

        // 如果值存在则执行某个操作
        optionalWithValue.ifPresent(val -> System.out.println("Value in optional: " + val)); // Value in optional: Hello, world!

        // 使用orElse方法获取值,如果Optional为空则返回默认值
        String valueOrDefault = optionalEmpty.orElse("Default Value");
        System.out.println("Value or default: " + valueOrDefault); // Value or default: Default Value

        // 使用orElseGet方法获取值,如果Optional为空则通过Supplier生成值
        String valueOrGenerated = optionalEmpty.orElseGet(() -> generateValue());
        System.out.println("Value or generated: " + valueOrGenerated); // Value or generated: Generated Value

        // 使用orElseThrow方法获取值,如果Optional为空则抛出异常
        try {
            String valueOrThrow = optionalEmpty.orElseThrow(() -> new IllegalArgumentException("Value is empty"));
        } catch (IllegalArgumentException e) {
            System.out.println("Exception thrown: " + e.getMessage()); // Exception thrown: Value is empty
        }
    }

    // 用于生成默认值的方法
    private static String generateValue() {
        return "Generated Value";
    }
}

在这个示例中,我们展示了如何创建包含非空值和空值的 Optional,以及如何检查 Optional 是否包含值,获取 Optional 中的值,执行操作,以及获取默认值或者抛出异常等操作。通过使用 Optional,我们可以更加安全和简洁地处理可能为空的值,避免了空指针异常的发生。