如何利用 Optional.orElse() 精妙应对方法可能返回 null 的情况?
- 内容介绍
- 相关推荐
本文共计874个文字,预计阅读时间需要4分钟。
很多人一看到 `Optional.orElse(())` 这种方法就想去用它来代替 `null`,结果发现返回的是 `null`。这其实是因为这个方法只对 `Optional` 类型有效。如果返回的是 `String`、`Integer` 或自定义对象,它不会按预期工作。根本原因在于这个方法只适用于 `Optional` 类型,而对于其他类型,如 `String`、`Integer` 或自定义对象,它并不会将它们转换为 `Optional`,因此无法调用 `orElse` 方法。
正确路径是:先确保方法本身返回 Optional,或者手动包装原始值。否则强行写 someMethod().orElse("default") 会报错 cannot resolve method 'orElse(String)'。
把 null-returning 方法改造成返回 Optional 是最干净的解法
与其在调用方反复做 if (x == null) 判断,不如让提供方承担“是否可空”的契约责任。
本文共计874个文字,预计阅读时间需要4分钟。
很多人一看到 `Optional.orElse(())` 这种方法就想去用它来代替 `null`,结果发现返回的是 `null`。这其实是因为这个方法只对 `Optional` 类型有效。如果返回的是 `String`、`Integer` 或自定义对象,它不会按预期工作。根本原因在于这个方法只适用于 `Optional` 类型,而对于其他类型,如 `String`、`Integer` 或自定义对象,它并不会将它们转换为 `Optional`,因此无法调用 `orElse` 方法。
正确路径是:先确保方法本身返回 Optional,或者手动包装原始值。否则强行写 someMethod().orElse("default") 会报错 cannot resolve method 'orElse(String)'。
把 null-returning 方法改造成返回 Optional 是最干净的解法
与其在调用方反复做 if (x == null) 判断,不如让提供方承担“是否可空”的契约责任。

