一尘不染

Java 8 getters是否应该返回可选类型?

java

Optional Java 8中引入的type对许多开发人员来说都是新事物。

getter方法返回Optional<Foo>类型代替经典方法Foo是一种好习惯吗?假设值可以是null


阅读 274

收藏
2020-02-29

共1个答案

一尘不染

当然,人们会做他们想要的。但是添加此功能时我们确实有明确的意图,并且它并不是通用的Maybe类型,因为许多人希望我们这样做。我们的意图是为库方法返回类型提供一种有限的机制,其中需要一种明确的方法来表示“无结果”,并且使用null这种方法极有可能导致错误。

例如,你可能永远不要将其用于返回结果数组或结果列表的东西;而是返回一个空数组或列表。你几乎永远不应将其用作某些内容或方法参数的字段。

我认为,通常将其用作获取方法的返回值肯定会过度使用。

应该避免使用Optional并没有什么错,这并不是很多人希望的那样,因此我们非常担心过度使用的风险。

(公共服务声明:除非你可以证明它永远不会为null,否则请不要调用Optional.get;而应使用诸如orElse或的安全方法之一ifPresent。回想起来,我们应该调用get诸如getOrElseThrowNoSuchElementException或之类的东西,使它更加清楚地表明这是一种非常危险的方法这首先破坏了的整个目的Optional。经验教训(更新:Java 10具有Optional.orElseThrow(),在语义上与等效get(),但其名称更合适。)

2020-02-29