OptionalJava 8 中引入的类型对于许多开发人员来说是一个新事物。
Optional
Optional<Foo>代替经典的getter方法返回类型是Foo一种好习惯吗?假设值可以是null。
Optional<Foo>
Foo
null
当然,人们会为所欲为。但我们在添加此功能时确实有明确的意图,它 不是 通用的 Maybe 类型,就像很多人希望我们这样做一样。我们的目的是为库方法返回类型提供一种有限的机制,其中需要一种明确的方式来表示“无结果”,而使用null这种方式极有可能导致错误。
例如,您可能永远不应该将它用于返回结果数组或结果列表的东西;而是返回一个空数组或列表。您几乎不应该将它用作某物的字段或方法参数。
我认为经常使用它作为 getter 的返回值肯定会被过度使用。
Optional 应该避免它并没有 错 ,它只是不是很多人希望的那样,因此我们相当担心过度使用的风险。
(公共服务公告: 永远不要 调用,除非你能证明Optional.get它永远不会为空;而是使用一种安全方法,例如orElseor这首先破坏了 的整个目的。吸取的教训。(更新:Java 10 具有,在语义上等同于,但其名称更合适。))ifPresent``get``getOrElseThrowNoSuchElementException``Optional``Optional.orElseThrow()``get()
Optional.get
orElse
ifPresent``get``getOrElseThrowNoSuchElementException``Optional``Optional.orElseThrow()``get()