为什么每次都执行orElse,即使它不应该? 我在这里做错了什么?我仍然在学习java :)初始化对象内嵌并作为参数传递 - java
Optional.ofNullable(myVar)
.orElse(Optional.ofNullable(myVar = ...)))
.orElseThrow(MyException::new))
为什么每次都执行orElse,即使它不应该? 我在这里做错了什么?我仍然在学习java :)初始化对象内嵌并作为参数传递 - java
Optional.ofNullable(myVar)
.orElse(Optional.ofNullable(myVar = ...)))
.orElseThrow(MyException::new))
使用orElseGet()
。它接受Supplier
,只有在需要时才会调用它。例如。
Optional.ofNullable(myVar)
.orElseGet(() -> Optional.ofNullable(myVar = ...)))
.orElseThrow(MyException::new))
澄清:您提供给orElse()
参数进行评估,但orElse()
本身不叫。这是你的情况的一个副作用,如果你想延迟它的执行时间,你应该使用orElseGet()
。
xplain我请第一whyyy ??? - Ckkn
方法orElse()
需要在方法调用执行前必须创建的对象。如果Nullable
的内容实际上是null
,则返回此(已存在)对象。
方法orElseGet()
还预计现有的对象,但这种对象不返回本身。预期的对象类型为Supplier
,当Nullable
的内容实际上是null
时,该对象具有调用的单个方法。 这样可以避免每次调用orElseGet()
时创建您的值对象。但是你通过创建一个Supplier
对象来“购买”这个对象。在另一方面,Supplier
对象很容易被一个实例成员或常量...
aaahh该死的,我明白了,谢谢 – Ckkn
解释我请第一whyyy ??? – Ckkn
为什么是副作用?编译器中的错误还是什么?请解释我,我想知道为什么在进一步编程时能够避免这些副作用 – Ckkn
Java在调用所述方法之前评估方法参数。在你的情况下,你提供了一个'orElse()'的参数,并且java高兴地评估了为方法调用做准备。所以即使没有调用'orElse()',你传递给'orElse()'的参数也会被评估。 – Justas