代码之家  ›  专栏  ›  技术社区  ›  kosiara - Bartosz Kosarzycki

Kotlin-可以为空的属性默认为空值

  •  2
  • kosiara - Bartosz Kosarzycki  · 技术社区  · 6 年前

    假设我用 可以为空 财产

    class ABC {
       var myProperty: String? = null
    }
    

    有没有方法将其默认为空值? 也许是类似斯卡拉的东西?

    var myProperty: String? = _  // compilation error
    

    或者简单地说:

    var myProperty: String?  // compilation error
    

    我知道我们可以用 拉蒂尼特 随后可以检查Kotlin 1.2中的变量是否初始化,如下所示:

    lateinit var myProperty: String
    
    if (::myProperty.isInitialized) {
       //value is not-null
    }
    

    那么,lateinit是首选的方式吗?默认为空值是可能的还是故意省略的?

    3 回复  |  直到 6 年前
        1
  •  4
  •   Alexey Soshin    6 年前

    简短的回答是不。
    与其他语言(scala、go)不同,Kotlin并不认为它最了解类型的默认值是什么(谁说int的默认值应该是0?)

        2
  •  5
  •   yole    6 年前

    Kotlin有意要求您显式初始化所有属性。没有速记语法。对于可为空类型的属性,首选方法是不使用 lateinit ,但要用 null 初始值设定项。

    这个 isInitialized 方法 拉蒂尼特 属性设计用于处理复杂的情况,如清理资源;它不用于替换 无效的 检查希望在写入时保存的用户 = null 作为财产申报的一部分。

        3
  •  0
  •   Sir Codesalot    6 年前

    还可以声明一个全局函数

    fun nullString(): String? {
        return null
    }
    

    像这样使用

    class ABC {
       var myProperty = nullString()
    }
    

    因为语言中只有一个空引用,所以全局变量也可以工作。

    var nullString : String? = null
    
    class ABC {
       var myProperty = nullString
    }
    

    P.S. 不幸的是,像“u”这样的空间字符在Kotlin中是保留的,因此您不能使用它来命名变量并创建 var myProperty = _