可以说,我有一个变量:
var myObject:MyObject? = null
它应该在某个地方清除:
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不能有不同的类型.我建议一个单独的可空私有属性和一个清除它的方法:
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.