对于许多开发人员来说,Java8中引入的Optional
类型是一个新事物.
用getter方法返回Optional<Foo>
类型而不是classic 的Foo
类型是一种好的实践吗?假设该值可以是null
.
对于许多开发人员来说,Java8中引入的Optional
类型是一个新事物.
用getter方法返回Optional<Foo>
类型而不是classic 的Foo
类型是一种好的实践吗?假设该值可以是null
.
当然,人们会为所欲为.但我们在添加这个功能时确实有一个明确的意图,它是not,是一个通用的可能类型,因为很多人都希望我们这样做.我们的目的是为库方法返回类型提供一种有限的机制,其中需要有一种清晰的方式来表示"无结果",而使用null
来表示"无结果"极有可能导致错误.
例如,您可能永远不应该将其用于返回结果数组或结果列表的内容,而应返回空数组或列表.您几乎不应该将其用作某物的字段或方法参数.
我认为常规地将其用作getter的返回值肯定会过度使用.
没有什么是wrong可选的应该避免的,只是它不是许多人希望的那样,因此我们相当担心狂热过度使用的风险.
(公共服务公告:NEVER呼叫Optional.get
,除非你能证明它永远不会为空;相反,使用orElse
或ifPresent
这样的安全方法之一.回顾过go ,我们应该呼叫get
,比如getOrElseThrowNoSuchElementException
,或者更清楚地表明,这是一种高度危险的方法,从一开始就 destruct 了Optional
的整体用途.第1课赚得.(更新:Java10有Optional.orElseThrow()
,这在语义上等同于get()
,但其名称更合适.)