比方说,我有一个变量:
var myObject : MyObject? = null
它应该在一些地方被清除:
myObject?.clear
myObject = null
并应在一个地方使用的绝对不可为空。在Java中,我可以做这样的事情:
private MyObject getMyObject(){
if(myObject == null) {
myObject = new MyObject()
}
return myObject
}
问题:我如何才能做到在科特林?
我发现了一个建议,使用猫王操作:
private fun getMyObject() = myObject ?: MyObject()
但是,这并不分配结果(如果新的实例MyObject
将被创建)的myObject
变量。请帮我解决和解释。提前感谢
问题是,一个属性的getter和setter不能有不同的类型。我建议单独为空的私有财产和清除它的方法:
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
}
如果您需要这种模式不止一次,写一个代表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句