为什么Java中的或ElseThrow()
方法将供应商
作为参数,而不是异常
?这是一个问题,我找到的最好的答案是在这里,说明
这里最重要的概念是,通过提供方法引用(或函数),可以懒惰地初始化它。如果不需要,则不需要创建异常对象。只在你需要的时候创建它。
但我还是不明白。为什么对象创建不能是懒惰的?
我们应该像这样使用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方法使用任何参数,因此应允许这样做。 这不是面试问题。编程时才想到。 问题答案: 基本上,有四个答案: 因为那是它的设计方式。是的,我知道这是一个循环的原因。但是关键是这就是它的样子,并且不会改变。因此,除非您打算设计自己的语言,否则这个问题