Optional 的设计意图(据其作者 Brian Goetz)很窄:作为方法的返回类型,明确表示「可能没有返回值」,迫使调用方显式处理空的情况,替代返回 null 靠文档约定的脆弱方式。正确用法:orElse 给默认值、orElseGet 延迟计算默认值(默认值构造有开销时必须用它)、orElseThrow 抛业务异常、map/filter/flatMap 做链式变换。

典型误用:1)opt.isPresent() + opt.get()——只是把 if (x != null) 换了个写法,没任何收益,还多了包装开销,看到就该改;2)把 Optional 用作类的字段(不实现 Serializable 的本意就是不建议序列化进实体);3)用作方法参数(调用方还得包装,直接重载更清晰);4)orElse 与 orElseGet 混用——orElse 的参数无论值是否存在都会执行,里面有 new/查询就是白做功;5)Optional 里包 null、返回 null 的 Optional 字段——彻底违背初衷。追问方向:Optional 与 Kotlin 可空类型的设计对比、stream().findFirst() 为什么天然返回 Optional、性能上 Optional 包装的逃逸分析优化。

(约 380 字)