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

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

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

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

我正在尝试阅读Kotlin documentation for properties,但我无法确定这是否应该起作用 .

这是否是有效的Kotlin代码?

回答(1)

3 years ago

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

var test: String
    private set

如果您使 var 完全没有字段支持,您的意图是可能的:

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

对于Backing Fields,文档说明:

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