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

为什么Java中的orElseThrow()方法将供应商作为参数,而不是异常?

危卜鹰
2023-03-14

为什么Java中的或ElseThrow()方法将供应商作为参数,而不是异常?这是一个问题,我找到的最好的答案是在这里,说明

这里最重要的概念是,通过提供方法引用(或函数),可以懒惰地初始化它。如果不需要,则不需要创建异常对象。只在你需要的时候创建它。

但我还是不明白。为什么对象创建不能是懒惰的?

共有1个答案

仇正豪
2023-03-14

我们应该像这样使用orelsetrow()

anOptional.orElseThrow(() -> new Exception())

由于上述操作不会立即创建异常:仅当可选项不存在时,才会调用供应商lambda,此时将实例化新异常。另一方面,如果我们遇到这种情况:

anOptional.orElseThrow(new Exception())

即使存在可选项,也总是会创建异常,这将是昂贵的。这就是为什么或ElseThrow需要一个供应商的原因

我们说它是“懒惰的”,因为lambda的身体只有在真正需要的最后一刻才会被评估,但是如果它从来不需要,lambda的身体就永远不会被处决。

 类似资料:
  • 我想根据Person类中的一些属性过滤掉重复项。我的方法定义如下: 对上述方法的调用如下: 在方法定义中,我可以看到参数可以是函数实现,但上面代码中传递的参数是供应商类型(因为它们返回的是结果,不接受任何参数。但这很好。它是如何工作的?有人能解释吗。

  • 我有一个接口,其参数可以为空。 为了避免空参数和空检查,通常的建议是使用方法重载: 在某些情况下,我不喜欢这种方法,因为它迫使客户做这种工作: 客户端使用更方便: 初看起来,可选选项可以解决这个问题,但是“可选”不应该用于参数https://rules.sonarsource.com/java/RSPEC-3553 所以我的问题是:我可以用供应商来代替吗? 以至 这个想法没有任何警告。 我个人很喜

  • 问题内容: 我想知道为什么当描述为char时indexOf方法的参数为int。 public int indexOf(int ch) http://download.oracle.com/javase/1,5.0/docs/api/java/lang/String.html#indexOf%28int%29 a]基本上,我感到困惑的是java中的int是32位,而unicode字符是16位。 b]

  • 问题内容: 为什么Java中的main方法总是需要参数?为什么我们每次都要写,而不是在使用任何参数时才写? 这样的方法会生成编译器错误。由于我们从不对main方法使用任何参数,因此应允许这样做。 这不是面试问题。编程时才想到。 问题答案: 基本上,有四个答案: 因为那是它的设计方式。是的,我知道这是一个循环的原因。但是关键是这就是它的样子,并且不会改变。因此,除非您打算设计自己的语言,否则这个问题