对于许多开发人员来说,Java8中引入的Optional类型是一个新事物.

用getter方法返回Optional<Foo>类型而不是classic 的Foo类型是一种好的实践吗?假设该值可以是null.

推荐答案

当然,人们会为所欲为.但我们在添加这个功能时确实有一个明确的意图,它是not,是一个通用的可能类型,因为很多人都希望我们这样做.我们的目的是为库方法返回类型提供一种有限的机制,其中需要有一种清晰的方式来表示"无结果",而使用null来表示"无结果"极有可能导致错误.

例如,您可能永远不应该将其用于返回结果数组或结果列表的内容,而应返回空数组或列表.您几乎不应该将其用作某物的字段或方法参数.

我认为常规地将其用作getter的返回值肯定会过度使用.

没有什么是wrong可选的应该避免的,只是它不是许多人希望的那样,因此我们相当担心狂热过度使用的风险.

(公共服务公告:NEVER呼叫Optional.get,除非你能证明它永远不会为空;相反,使用orElseifPresent这样的安全方法之一.回顾过去,我们应该呼叫get,比如getOrElseThrowNoSuchElementException,或者更清楚地表明,这是一种高度危险的方法,从一开始就破坏了Optional的整体用途.第1课赚得.(更新:Java10有Optional.orElseThrow(),这在语义上等同于get(),但其名称更合适.)

Java相关问答推荐

如何在使用 Stream 的同时将 Long 转换为 BigDecimal

使用 Java 流对嵌套对象进行分组和排序

使用 UNICODE_CHARACTER_CLASS 标志时的不同 Java 正则表达式匹配行为

Jpa阅读器Spring Batch

请求 Spring Data JPA 存储库时指定复杂的排序标准

如何在日期选择器中设置不在当前月份的单元格

Java 流不打印出预期值

如何总结具有特定 ID 的列表中对象的属性值并使用 Streams 将其分配给另一个对象

使用 Streams 在两个列表 List 中查找重复项

Stream API - 如果 filter() 紧随其后, sorted() 操作如何工作?

如何计算 Arraylist 中的每个唯一项?

为什么 Intellij 想法会在 if 条件下警告空指针?

java使用函数作为参数,只关心它的返回值

从 List 到 List 的 Java 流

TreeSet 正在向 Set 添加重复值

带有标题的 Kotlin 格式 CSV

Java - 单个语句中的变量声明、赋值和空值判断

根据列表 LocalDateTime 对象和已采取的带流的时隙列表创建可用时隙列表

Java中的重复输出

我们如何定义一个带有填充的列,并且只有一个项目不继承 Jetpack Compose 中列的填充?