在 kotlin 中处理 getter 和 setter 时出错
Getting error while dealing with getter and setter in kotlin
我将数据 class 定义为:
data class chatModel(var context:Context?) {
var chatManger:ChatManager?=null
//getter
get() = chatManger
//setter
set(value) {
/* execute setter logic */
chatManger = value
}
}
现在我将如何访问 get() 和 set() 函数。
在 java 我喜欢这样:
//对于getter
new chatModel().getJId()
//对于setter
new chatModel().setJId("jid")
编辑:
正如@yole 所建议的那样。我正在使用 setter 和 getter 作为:
//设置数据
var chatDetails:chatModel=chatModel(mApplicationContext)
chatDetails.chatManger=chatManager
但最终得到 java.lang.WhosebugError: 在
com.example.itstym.smackchat.Model.chatModel.setChatManger(chatModel.kt:38)
第 38 行指向
chatManger = value
这个。
@RobCo 建议。
我已将数据 class 定义更改为:
data class chatModel(var context: Context?) {
var chatManger:ChatManager
get() = field
set(value) {
field=value
}
}
//设置数据。
chatModel(mApplicationContext).chatManger=chatManager
//获取不同activity
中的数据
chatModel(applicationContext).chatManger
但出现错误 属性 必须初始化。如果我将它分配给 null 那么我得到的是 null 而不是设置值。
重要的是要记住,在代码中的任何地方引用 chatManger
最终都会调用 getChatManger()
或 setChatManger()
,包括 getter 或 [=22] 的内部=] 本身。这意味着您的代码将陷入无限循环并导致 WhosebugError
.
继续阅读 Properties,特别是有关 getters/setters 以及 "backing field" 的部分。
你调用setter里面的setter.. a.k.a。无限循环:
set(value) {
/* execute setter logic */
chatManger = value
}
在 属性 getter 或 setter 中还有一个可用的附加变量:field
。这表示 属性 的 java backing field。
get() = field
set(value) {
field = value
}
对于常规变量 属性,这些 getter 和 setter 是自动生成的。
因此,这是默认行为,如果您所做的只是将值设置为一个字段,则不必覆盖 getter / setter。
我将数据 class 定义为:
data class chatModel(var context:Context?) {
var chatManger:ChatManager?=null
//getter
get() = chatManger
//setter
set(value) {
/* execute setter logic */
chatManger = value
}
}
现在我将如何访问 get() 和 set() 函数。 在 java 我喜欢这样: //对于getter
new chatModel().getJId()
//对于setter
new chatModel().setJId("jid")
编辑:
正如@yole 所建议的那样。我正在使用 setter 和 getter 作为:
//设置数据
var chatDetails:chatModel=chatModel(mApplicationContext)
chatDetails.chatManger=chatManager
但最终得到 java.lang.WhosebugError: 在
com.example.itstym.smackchat.Model.chatModel.setChatManger(chatModel.kt:38)
第 38 行指向
chatManger = value
这个。
@RobCo 建议。
我已将数据 class 定义更改为:
data class chatModel(var context: Context?) {
var chatManger:ChatManager
get() = field
set(value) {
field=value
}
}
//设置数据。
chatModel(mApplicationContext).chatManger=chatManager
//获取不同activity
中的数据chatModel(applicationContext).chatManger
但出现错误 属性 必须初始化。如果我将它分配给 null 那么我得到的是 null 而不是设置值。
重要的是要记住,在代码中的任何地方引用 chatManger
最终都会调用 getChatManger()
或 setChatManger()
,包括 getter 或 [=22] 的内部=] 本身。这意味着您的代码将陷入无限循环并导致 WhosebugError
.
继续阅读 Properties,特别是有关 getters/setters 以及 "backing field" 的部分。
你调用setter里面的setter.. a.k.a。无限循环:
set(value) {
/* execute setter logic */
chatManger = value
}
在 属性 getter 或 setter 中还有一个可用的附加变量:field
。这表示 属性 的 java backing field。
get() = field
set(value) {
field = value
}
对于常规变量 属性,这些 getter 和 setter 是自动生成的。 因此,这是默认行为,如果您所做的只是将值设置为一个字段,则不必覆盖 getter / setter。