你可以用Kotlin中的自定义getter,默认setter和no initializer声明一个属性吗?

时间:2018-03-10 13:49:44

标签: android-studio kotlin

我有一个带有getter,默认setter的属性,没有这样的初始化器:

    var test: String
        get() = "test value"
        private set

如果我在Android工作室中尝试此代码,则会收到编译错误,指出Property must be initialized。如果我在try.kotlinlang.org处尝试,则代码运行正常,每当我访问该属性时都会返回test value

我试图阅读Kotlin documentation for properties,但我无法确定这是否应该有效。

这是否是有效的Kotlin代码?

1 个答案:

答案 0 :(得分:4)

try.kotlinlang.org也接受未初始化的val返回null,但它不可为空:

var test: String
    private set

如果你完全没有var字段支持,那么你的意图是可能的:

var test: String
    get() = "test value"
    private set(value) = Unit

对于Backing Fields文档说明:

  

如果属性使用至少一个访问者的默认实现,或者自定义访问者通过field标识符引用它,则将为该属性生成支持字段。