gpt4 book ai didi

Kotlin 自定义 Getter 让 `val` 和 `var` 混淆?

转载 作者:IT老高 更新时间:2023-10-28 13:42:02 26 4
gpt4 key购买 nike

在 Kotlin 中,var 是可变的,val 只能分配一次。

但是,请考虑以下示例中的 val foo:

var counter = 0

val foo: String
get(){
counter++
return "val$counter"
}

fun main(): String {
val a = foo
val b = foo
val c = foo
return "we got: $a $b $c"
// output: we got: val1 val2 val3
}

每次我们尝试访问 foo 时都会执行 get() 方法,从而导致 val 的值不同

由于 foo 的值在变化,我尝试使用 var。然后编译器提示“必须初始化属性”。所以我不得不给它一个默认值:

var foo: String = "default value that will never be used"
get(){
counter++
return "val$counter"
}

我不喜欢这两种方法。正确的做法是什么?

最佳答案

In Kotlin, var is mutable and val should be assigned only once.

对于局部变量,是的。对于属性,不是真的:val 表示“只有一个 getter”,var 表示“同时有一个 getter 和一个 setter”。这个getter(和setter)几乎可以做任何事情。例如,您可以每次只返回一个随机值。

一个异常(exception)是为 val 重新分配支持字段:

val foo: Int = 0
get(){
field++
return field
}

不会编译。

关于Kotlin 自定义 Getter 让 `val` 和 `var` 混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53698928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com