Optional类用于避免空指针异常,通过封装可能为null的对象并强制显式处理。使用Optional.ofNullable包装值,结合ifPresent、orElse、orElseThrow和flatMap等方法安全操作,避免直接调用get()导致异常,尤其适用于链式调用和嵌套结构判空,提升代码清晰度与安全性。

Java中的Optional类是一种用于防止NullPointerException的工具。它通过封装一个可能为null的对象,强制开发者显式处理空值情况,从而减少运行时异常。
使用Optional包装可能为空的对象
当一个方法返回的对象可能为null时,可以用Optional代替直接返回T类型。这样调用方必须先判断是否存在值才能使用。
Optionaloptional = Optional.ofNullable(getString()); - 如果
getString()返回null,optional不会是null,而是表示“空的Optional”
避免直接调用get()前不判空
get()方法在Optional为空时会抛出异常,因此应配合isPresent()使用或改用更安全的方法。
-
使用ifPresent():只在有值时执行操作
optional.ifPresent(str -> System.out.println(str.length())); -
提供默认值:用
orElse()或orElseGet()String result = optional.orElse("default"); -
抛出自定义异常:用
orElseThrow()String value = optional.orElseThrow(() -> new IllegalArgumentException("值不存在"));
链式调用避免深层判空
对于嵌套对象结构(如user.getAddress().getCity()),连续判空代码冗长。Optional支持扁平化处理。
立即学习“Java免费学习笔记(深入)”;
示例:-
Optional.ofNullable(user).flatMap(u -> Optional.ofNullable(u.getAddress())).map(addr -> addr.getCity()).orElse("未知城市"); - 每一层自动跳过
null情况,无需手动写多层if != null
get(),也不要把它当作所有null问题的万能解。










