Optional.of()仅用于包装确定非null的值,传入null会立即抛出NullPointerException;而Optional.ofNullable()可安全处理null并返回empty。

Optional.of() 专门用于创建**内部值一定非 null** 的 Optional 对象。它不接受 null 参数,一旦传入 null,会立即抛出 NullPointerException。
使用前提:确保值非 null
调用 Optional.of(value) 前,你必须**已经确认 value 不为 null**。它不是用来“防御性包装”的工具,而是表达“我确信这个值存在”的语义。
- 适合场景:方法返回值已校验、构造参数明确非空、常量或字面量
- 不适合场景:从外部输入(如用户输入、HTTP 请求参数、数据库查询结果)直接传入,除非你已在上游做了显式判空
基本用法示例
直接传入一个非 null 对象即可:
(注意:以下代码中"hello" 是非 null 字符串,安全)Optional
Optional
Optional> list = Optional.of(Arrays.asList("a", "b"));
与 Optional.ofNullable() 的关键区别
Optional.of() 和 Optional.ofNullable() 容易混淆,但语义和行为完全不同:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
-
Optional.of(null)→ 立即抛出NullPointerException -
Optional.ofNullable(null)→ 返回Optional.empty()(安全,推荐用于可能为 null 的场景) - 若不确定是否为 null,请优先用
ofNullable();只有在逻辑上“绝不可能为 null”时才用of()
常见误用及修复
下面写法是危险的:
String input = request.getParameter("name");<br>Optional<string> opt = Optional.of(input); // ❌ 如果 input 为 null,运行时报错</string>
应改为:
String input = request.getParameter("name");<br>Optional<string> opt = Optional.ofNullable(input); // ✅ 安全</string>
或者,如果业务上要求该参数必填,应在更早阶段校验并抛出业务异常,而不是依赖 of() 来“兜底”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










