orelseget()
方法接受一个供应商函数接口,该接口本质上不接受任何参数,并返回T
。
在哪种情况下需要使用orelseget()
?如果您有一个方法tMyDefault()
为什么不直接执行optional.orelse(myDefault())
而不执行optional.orelseGet(()->myDefault())
?
orelseget()
似乎并不是要将lambda表达式的执行推迟到以后的某个时间或其他时间,那么这有什么意义呢?(我认为如果它返回一个更安全的可选
会更有用,它的get()
从不抛出nosuchelementexception
并且ispresent()
总是返回true...但显然它不是,它只是返回t
,就像orelse()
)。
是不是还有什么我遗漏的不同之处?
以以下两种情况为例:
Optional<Foo> opt = ...
Foo x = opt.orElse( new Foo() );
Foo y = opt.orElseGet( Foo::new );
如果opt
不包含值,则两者实际上是等价的。但是,如果opt
确实包含一个值,那么将创建多少foo
对象?
附注:当然,在本例中,这种差异可能无法测量,但如果您必须从远程web服务(例如)或数据库中获取默认值,它突然变得非常重要。
我需要一个明确的解释这一点,即使我读了这个关于差异的链接,但没有明确的清晰。那么有没有人可以简单地用代码向我解释一下呢?
在swift中似乎有两个相等运算符:双相等()和三相等(),这两者有什么区别?
嗨,我对时区没有什么疑问: null 我在维基百科和许多相关网站上搜索过,但没有找到相关的解释
什么时候只能使用其中的一个? 何时可以同时使用和如何选择一个?
谁能给我举个例子吗?