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