实例在科特林一个变量,只有当它是一个空?

杰克·琼斯:

比方说,我有一个变量:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我要在一个空科特林功能,从Java调用时,并没有返回null Unit.INSTANCE?

在科特林XOR运算功能或一个错误?

是否有一个相当于科特林Java的Collections.synchronizedList的?或者这是不是需要科特林

它是不好的做法,有一个实例变量的有效性依赖于另一个实例变量?

科特林:如何观察一次在一个视图模型一个liveData?使用ObserveForever()和removeObserver()

如何申报科特林LAMBDA与一个java调用者返回类型“无效”?

是可以安全使用科特林属性访问语法来设置一个Java领域

如何声明与一个java调用者返回类型“无效”一科特林功能?

如何基于功能接口科特林一个Java的拉姆达转换?

如何创建一个科特林MVVM实体类

Androidx科特林使用GSON,需要创建一个嵌套GSON数据类

创建一个新的变量,并检查它是否是空的,如果一个

不能创建一个抽象类随机科特林的实例

如何为Base64解码在科特林/ Java的一个numpy的阵列(Python)的?

是否应科特林文件在Android的一个单独的源目录放?

建设有一个摇篮+科特林的Java项目9

为什么科特林接收到这样的UndeclaredThrowableException中,而不是一个ParseException?

从Java调用一个科特林高阶函数

如何通过一个科特林集合作为varagrs?

实例化一个具体的Java类,它的用途在科特林递归仿制药

从一个公共方法的Java类继承在接受一个科特林级保护

如何创建一个固定大小IntArray后来在科特林初始化数组?

一个类只有5个实例

如何检查三个变量中是否只有一个不为空?

创建一个子类的多个实例,只有一个超类的实例

查找具有相同第一个元素的对的平均值。科特林

如何在科特林四舍五入一个数字

我需要选择(不是最后一个孩子)只有当它有一个特定的类

只有当另一个方法已经运行时,你如何执行一个方法?