比方说,我有一个变量:
var myObject : 我的对象? = 空
它应该在某个地方被清除:
myObject?.clear
myObject = null
并且在使用的地方应该绝对不可为空。在 Java 中我可以这样做:
private MyObject getMyObject(){
if(myObject == null) {
myObject = new MyObject()
}
return myObject
}
问题:我如何在 Kotlin 中实现这一目标?
我找到了使用 elvis-operator 的建议:
private fun getMyObject() = myObject ?: MyObject()
但这不会将结果(如果将创建 MyObject
的新实例)分配给 myObject
变量。
请帮我解决和解释。先谢谢了
最佳答案
问题是属性的 getter 和 setter 不能有不同的类型。我建议一个单独的可为 null 的私有(private)属性和一个清除它的方法:
private var _myObject: MyObject? = null
var myObject: MyObject // or val, depending
get() {
if (_myObject == null) { _myObject = MyObject() }
return _myObject!!
}
set(value: MyObject) {
_myObject?.clear()
_myObject = value
}
fun clearMyObject() {
_myObject?.clear()
_myObject = null
}
如果你多次需要这个模式,写一个delegate .
关于java - 仅当变量为空时才在 Kotlin 中实例化变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54568266/