Android studio 您可以在Kotlin中声明具有自定义getter、默认setter和无初始值设定项的属性吗?

Android studio 您可以在Kotlin中声明具有自定义getter、默认setter和无初始值设定项的属性吗?,android-studio,kotlin,Android Studio,Kotlin,我有一个具有getter、defaultsetter和类似的初始值设定项的属性: var test: String get() = "test value" private set 如果我在Android studio中尝试这段代码,我会得到一个编译错误,说明属性必须初始化。如果我改为在上尝试,则代码运行良好,并且每当我访问该属性时,都会返回测试值 我正试着读《科特林》,但我真的不知道这是否有效 这是否是有效的Kotlin代码?也接受未初始化的val返回

我有一个具有getter、defaultsetter和类似的初始值设定项的属性:

    var test: String
        get() = "test value"
        private set
如果我在Android studio中尝试这段代码,我会得到一个编译错误,说明
属性必须初始化。如果我改为在上尝试,则代码运行良好,并且每当我访问该属性时,都会返回
测试值

我正试着读《科特林》,但我真的不知道这是否有效

这是否是有效的Kotlin代码?

也接受未初始化的
val
返回
null
,尽管它不可为null:

var test: String
    private set
如果您完全不支持
var
字段,您的意图是可能的:

var test: String
    get() = "test value"
    private set(value) = Unit
文件说明如下:

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


你想完成什么?对于这样的实现,分配给属性的值将被忽略。为什么不
val test=“test value”
呢?在我最初的例子中,getter将调用一个函数,该函数根据调用时间返回不同的值。有一段时间我一直认为
val
意味着属性总是返回相同的值。所以我认为让它每次调用时返回不同的值会让人困惑。因此,我尝试创建一个只读
var
。但我后来意识到
val
只是指只读,而不是常量。所以我没有使用这段代码,我只是想更好地理解这门语言。我也用完全相同的kotlin版本测试了代码,并得到了相同的结果。“我建议为此提交一份报告,因为这种差异很可能不是故意的。”Anton根据tynn的回答,再次阅读文档。我相信在这种情况下给出一个编译错误是正确的。啊哈!由于我使用set访问器的默认实现,它将生成一个支持字段,并且由于它有一个支持字段,因此必须对其进行初始化。try.kotlinlang.org上的行为正确吗?它不应该给出与IDE中相同的编译错误吗?@user2340612我不确定它是as中的编译错误还是lint错误,但是因为在TRY中,当属性未初始化时,它是
null
,所以它似乎是错误的。