而不是如下初始化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进行这种操作极有可能导致错误
摘自布莱恩·戈茨的回答。