[英]Lazy initialization of nullable member
如果我们将成员变量定义为
private var foo: Foo? = null
当我们调用带有参数的方法(初始化Foo时需要)时,我们想要初始化它,有没有比这更好的方法呢?
fun generateFoo(bar: Bar): Foo {
var localFoo = foo
if (localFoo == null) {
localFoo = Foo(bar)
foo = localFoo
}
return localFoo
}
我正在考虑避免所有变量赋值。
编辑:这里的版本略短,但仍不理想
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 }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.