gpt4 book ai didi

kotlin - 如何在 Kotlin 中编写 getter

转载 作者:行者123 更新时间:2023-12-02 18:28:18 25 4
gpt4 key购买 nike

我懂一点java,目前正在学习kotlin。我不太清楚 setter/getter 。我有一个类和一些函数。

class Client(val personalInfo: PersonalInfo?){} //class

fun sendMessageToClient(client: Client?) {
val personalInfo: PersonalInfo? = client?.personalInfo
//...
}

据我了解,getter是在代码client?.personalInfo中调用的。或者它是一个类字段,因为 private 没有在任何地方明确指定?

接下来,我想向 getter 添加一些逻辑,但我收到一个错误,表明这样的签名已经存在。

class Client(val personalInfo: PersonalInfo?){
fun getPersonalInfo():PersonalInfo?{
print(personalInfo)
return personalInfo
}
}

如果我指定该字段是私有(private)的,则错误会消失class Client(private val individualInfo: PersonalInfo?),但代码client?.personalInfo不会工作

我尝试重写代码,但我不知道如何指定 val 并从构造函数向其传递一个值

class Client(personalInfo: PersonalInfo?) {
val personalInfo = //??
get() {
print("personal info $personalInfo")
return personalInfo
}
}

是否可以以某种方式将 print 添加到 getter 并仍然使用 client?.personalInfo

最佳答案

你就快到了。在 kotlin 中创建自定义 getter 时,当您希望使用关联属性的值时,必须使用关键字 field (您可以在 https://kotlinlang.org/docs/properties.html#backing-fieldshttps://www.baeldung.com/kotlin/getters-setters#1-accessing-the-backing-field 处的引用文档中阅读更多相关信息):

Every property we define is backed by a field that can only be accessed within its get() and set() methods using the special field keyword. The field keyword is used to access or modify the property’s value. This allows us to define custom logic within the get() and set() methods.

写完这个后,您只需要稍微更改一下代码,如下所示:

class Client(personalInfo: String?) {
val personalInfo: String? = personalInfo
get() {
print("personal info $field")
return field
}
}

关于kotlin - 如何在 Kotlin 中编写 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69803704/

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