仅当为空时才分配变量
在Ruby上有这样的东西:
@var ||= 'value'
基本上,这意味着@var
只有在@var
没有被赋值'value'
才会被赋值(例如,如果@var
是nil
)
我在Kotlin上也是这么想的,但到目前为止,最接近的就是猫王操作员。 有没有这样的事情,我错过了文档?
我能想到的最简单的方法就是使用elvis算子:
value = value ?: newValue
如果经常这样做,另一种方法是使用一个委托属性 ,如果它的null
,则该属性只存储该值:
class Once<T> { private var value: T? = null operator fun getValue(thisRef: Any?, property: KProperty<*>): T? { return value } operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) { this.value = this.value ?: value } }
你现在可以创建一个像这样使用它的属性:
var value by Once<String>() fun main(args: Array<String>) { println(value) // 'null' value = "1" println(value) // '1' value = "2" println(value) // '1' }
请注意,这不是线程安全的,不允许设置回null
。 另外,这个确实评估了new
表达式,而简单的elvis操作符版本可能不会。