加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 只有在Kotlin为空时才在Kotlin中实例化变量?

发布时间:2020-12-15 05:18:36 所属栏目:Java 来源:网络整理
导读:可以说,我有一个变量: var myObject:MyObject? = null 它应该在某个地方清除: myObject?.clearmyObject = null 并且在使用地点应该绝对不可为空.在Java中,我可以这样做: private MyObject getMyObject(){ if(myObject == null) { myObject = new MyObje
可以说,我有一个变量:

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读