Optional类详解
Optional类详解
本章导读
Optional类是Java 8引入的容器类,专门用于解决令人头疼的空指针异常(NPE)问题。它强制开发者显式处理可能为空的情况,让代码更安全、意图更清晰。正确使用Optional,可以显著提升代码的健壮性和可读性。
学习目标:
- 目标1:掌握Optional的三种创建方式及使用场景
- 目标2:熟练运用orElse、orElseGet、orElseThrow等方法处理空值
- 目标3:理解Optional最佳实践,避免常见误用
前置知识:Java基础语法、Lambda表达式、Stream API
阅读时长:约 20 分钟
一、知识概述
Optional类是Java 8引入的容器类,用于解决空指针异常问题,使代码更加安全和可读。
1.1 Optional基本概念
┌─────────────────────────────────────────────────────────────┐ │ Optional类核心 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Optional<T> 是一个容器对象,可能包含或不包含非空值 │ │ │ │ 创建方式: │ │ - Optional.empty() 空Optional │ │ - Optional.of(value) 非空值(不能为null) │ │ - Optional.ofNullable(v) 可为null的值 │ │ │ │ 核心方法: │ │ - isPresent() 是否存在值 │ │ - get() 获取值(不推荐直接使用) │ │ - orElse() 提供默认值 │ │ - orElseGet() 延迟计算默认值 │ │ - orElseThrow() 抛出异常 │ │ - map() 映射转换 │ │ - flatMap() 扁平映射 │ │ - filter() 过滤 │ │ │ └─────────────────────────────────────────────────────────────┘二、Optional使用详解
2.1 创建Optional
// ============================================// Optional创建方式// ============================================publicclassOptionalCreation{publicstaticvoidmain(String[]args){// 空OptionalOptional<String>empty=Optional.empty();// 非空值(如果传入null会抛NPE)Optional<String>of=Optional.of("Hello");// 可为null的值(推荐使用)Optional<String>nullable=Optional.ofNullable(getValue());}privatestaticStringgetValue(){returnMath.random()>0.5?"value":null;}}2.2 获取值
// ============================================// Optional获取值方式// ============================================publicclass