Optional 使用最佳实践
面试官问:"Optional 是什么?"
候选人小严答:"Optional 是用来避免空指针异常的。"
面试官追问:"那怎么正确使用 Optional?"
小严说:"用 ofNullable() 创建,调用 orElse() 取值。"
面试官追问:"能用 Optional 做属性吗?"
小严说:"...应该可以吧?"
面试官又问:"Optional 能序列化吗?"
小严答不上来。
【面试官心理】 这道题考查的是候选人对 Optional 设计意图的理解。能说出 Optional 不适合做字段、不能序列化、并给出正确 null 检查链式用法的候选人,说明有函数式编程经验。
一、Optional 基础 🔴
1.1 创建 Optional
1.2 常用方法
二、Optional 的三大陷阱 🔴
2.1 陷阱一:Optional 不能做字段
2.2 陷阱二:orElse() vs orElseGet()
2.3 陷阱三:Optional.of() 传入 null
三、链式调用最佳实践 🔴
3.1 嵌套 null 检查
3.2 findFirst/findAny 的结果处理
3.3 filter 与 map 的组合
四、生产中的使用规范 🟡
4.1 方法返回类型
4.2 集合返回 Optional
五、Optional 与 Stream 的对比 🟡
六、追问升级
面试官:"Optional 的内部实现是什么?"
【面试官心理】 能说出 Optional 有两个内部子类的候选人,说明看过 JDK 源码。这是 P6 的加分点。