当前位置: 首页 > 知识库问答 >
问题:

可选vs.null。Java8中可选的目的是什么?[副本]

缪征
2023-03-14

在Java8中,可以返回optional而不是null。Java8文档说,可选的是“一个容器对象,它可以包含非空值,也可以不包含非空值。如果存在一个值,isPresent()将返回true,而get()将返回该值。”

在实践中,这为什么有用呢?另外,有没有使用null作为首选项的情况?那表演呢?

共有1个答案

丁嘉
2023-03-14

在实践中,这为什么有用呢?

例如,假设您有一个整数流,并且正在进行过滤:

int x = IntStream.of(1, -3, 5)
                 .filter(x -> x % 2 == 0)
                 .findFirst(); //hypothetical assuming that there's no Optional in the API

您事先并不知道筛选操作会移除流中的所有值。

关于非流的使用,除了防止NPE之外,我认为设计一个更明确的API来说明值可能存在或不存在也会有所帮助。例如,考虑以下类:

class Car {
   RadioCar radioCar; //may be null or not 
   public Optional<RadioCar> getRadioCar() {
        return Optional.ofNullable(radioCar);
   }
}

这里你是清楚地对打电话的人说,车里的收音机是可选的,它可能在那里,也可能不在那里。

 类似资料:
  • 问题内容: 从Apple的文档中: 您可以使用和一起使用可能缺少的值。这些值表示为可选值。可选值包含一个值或包含一个指示该值丢失的值。在值的类型后写一个问号(),以将该值标记为可选。 为什么要使用可选值? 问题答案: Swift中的可选类型是可以保存值或不保存值的类型。通过将a附加到任何类型来编写可选内容: 可选(以及泛型)是最难理解的Swift概念之一。由于它们是如何编写和使用的,很容易对它们是

  • 为什么要使用可选值?

  • 问题内容: 它以空字符串开头,而不是nil。即使将其显式设置为nil,它仍然是一个空字符串。我不明白 也许通过分配nil使其易于清除?用它编写代码很麻烦。 问题答案: 这是历史性的事情。空字符串和字符串之间没有任何区别。在Objective- C中,无需在两者之间进行区别,因为您可以在Objective-C中调用方法。 同样,在Objective-C中也无法阻止用户分配给属性。生成的合同可以是可选

  • 问题内容: 在Java 8中,您可以返回而不是。Java8文档说Optional是“一个可能包含也可能不包含非null值的容器对象。如果存在一个值,则isPresent()将返回true,而get()将返回该值。” 实际上,这为什么有用?另外,在任何情况下,使用都是首选?性能如何? 问题答案: 实际上,这为什么有用? 例如,假设您有以下整数流,并且正在执行过滤: 您事先并不知道过滤操作会删除Str

  • 问题内容: 我读苹果文档 ,当我发现这句话: 本类仅包含一个属性:。 此属性存储对应用程序窗口的引用。此窗口表示应用程序视图层次结构的根。这 是绘制所有应用程序内容的地方。请注意,window属性是 可选的 ,这意味着 在某些时候它可能没有任何值(为nil ) 。 我不明白的是:为什么此属性有时可能为零? 变成零的情况是什么? 问题答案: 当您关闭应用程序时,您的应用程序仍可以接收静默通知 或在后

  • 为什么可选在线? 当可选值包含“nil”时,必须将可选类型“Int?”的值解包为“Int”类型的值,并使用“?”合并,以提供默认值,当可选值包含“nil”时使用“!”强制解包以中止执行 所以这修复了它: 如果我将其分解,则会在添加<code>let index</code>时发生更改。。。。 OK -这将返回first的总计数,total不是可选的: 确定-此枚举和总计不是可选的: 错误 - 这会