惰性成员的惰性初始化
如果我们有一个成员variables定义为
private var foo: Foo? = null
当我们调用带有参数的方法(需要初始化Foo)时,我们想要初始化它,还有更好的方法吗?
fun generateFoo(bar: Bar): Foo { var localFoo = foo if (localFoo == null) { localFoo = Foo(bar) foo = localFoo } return localFoo }
我正在考虑避免所有的variables赋值。
编辑:稍微短一点的版本在这里,但仍然不理想
fun generateFoo(bar: Bar): Foo { var localFoo = foo ?: Foo(bar) foo = localFoo return localFoo }
这是安全的,除非你有多个线程击中你的课堂:
fun generateFoo(bar: Bar): Foo { if (foo == null) { foo = Foo(bar) } return foo!! }
但是,如果你喜欢,你可以做这样的事情 – 对你来说,不管你认为这比你已有的更长的版本更可读:
fun generateFoo(bar: Bar) = foo ?: Foo(bar).also { foo = it }