我懂一点java,目前正在学习kotlin。我不太清楚吸气剂。我有一个类和一些功能。
class Client(val personalInfo: PersonalInfo?){} //class
fun sendMessageToClient(client: Client?) {
val personalInfo: PersonalInfo? = client?.personalInfo
//...
}
Run Code Online (Sandbox Code Playgroud)
据我了解,代码中调用了getter client?.personalInfo。或者它是一个类字段,因为 private 没有在任何地方明确指定?
接下来,我想向 getter 添加一些逻辑,但我收到一个错误,表明这样的签名已经存在。
class Client(val personalInfo: PersonalInfo?){
fun getPersonalInfo():PersonalInfo?{
print(personalInfo)
return personalInfo
}
}
Run Code Online (Sandbox Code Playgroud)
如果我指定该字段是私有的,错误就会消失class Client(private val personalInfo: PersonalInfo?),但是代码client?.personalInfo将无法工作
我尝试重写代码,但我不知道如何指定val并向其传递构造函数中的值
class Client(personalInfo: PersonalInfo?) {
val personalInfo = //??
get() {
print("personal info $personalInfo")
return personalInfo
}
}
Run Code Online (Sandbox Code Playgroud)
是否有可能以某种方式添加print到吸气剂并仍然使用client?.personalInfo?
你就快到了。field在 kotlin 中创建自定义 getter 时,当您希望使用关联属性的值时,必须使用关键字(您可以在https://kotlinlang.org/docs/properties.html#backing的参考文档中阅读更多相关信息) -fields或https://www.baeldung.com/kotlin/getters-setters#1-accessing-the-backing-field):
\n\n我们定义的每个属性都由一个字段支持,该字段只能使用特殊的 field 关键字在其 get() 和 set() 方法中访问。field 关键字用于访问或修改属性\xe2\x80\x99s 值。这允许我们在 get() 和 set() 方法中定义自定义逻辑。
\n
写完后,您只需要稍微更改一下代码,如下所示:
\nclass Client(personalInfo: String?) {\n val personalInfo: String? = personalInfo\n get() {\n print("personal info $field")\n return field\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |