如果每个业务逻辑不允许缺少值,为什么要使用Optional.of方法



而不是如下初始化optCar变量:

Optional<'Car'> optCar = Optional.of(car);

为什么不简单地初始化为:

Car optCar = car;

当业务逻辑不允许car为null时?

你完全可以。

可选适用于有代码的情况

If(object == null) {…

相反,你可以使用Optional,然后你可以很酷地访问类似流的功能和/或其他语句,这些功能使你的代码变得更好,例如:

return Optional.ofNullable(object).orElse(defaultObject);

或者另一个例子

return Optional.ofNullable(object).map(Object::toString).orElseThrow();

如果存在可选项或引发异常,则最后一个代码返回ur对象的字符串表示。orElseThrow在您确实确信对象始终存在的情况下最有用,因此这种情况可能永远不会出现,如果您不知道该往哪里看。

但正如我在一开始所说,如果你不需要这些功能,你就不需要使用

如果您确信car永远不会为null,那么使用Optional将是一种过度使用。

Optional的存在是为了明确此特定实例可以为null,并且需要展开Optional并明确检查是否存在值。

不要按照我说的去做,听专家说:

我们的意图是为库方法返回类型提供一种有限的机制,其中需要有一种明确的方式来表示";没有结果";,而使用null进行这种操作极有可能导致错误

摘自布莱恩·戈茨的回答。

最新更新