在处理kotlin中的getter和setter时出错

我已经将数据类定义为:

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.StackOverflowError:at

 com.example.itstym.smackchat.Model.chatModel.setChatManger(chatModel.kt:38) 

第38行指向

 chatManger = value 

这个。

@RobCo建议。

我已经将数据类定义更改为:

 data class chatModel(var context: Context?) { var chatManger:ChatManager get() = field set(value) { field=value } } 

//设置数据。

  chatModel(mApplicationContext).chatManger=chatManager 

//获取不同活动的数据

 chatModel(applicationContext).chatManger 

但获取错误属性必须初始化。 如果我将它分配给null,那么我得到的不是设定值。

你在setter里面调用setter ..又名无限循环:

  set(value) { /* execute setter logic */ chatManger = value } 

在属性getter或setter中,有一个额外的变量可用: field 。 这表示该属性的java 支持字段 。

  get() = field set(value) { field = value } 

使用常规的var属性,这些getter和setter是自动生成的。 所以,这是默认的行为,你不必重写getter / setter,如果你只是把值设置为一个字段。

请务必记住,在代码中引用chatManger最终会调用getChatManger()setChatManger() ,包括getter或setter本身。 这意味着你的代码将会以无限循环结束并导致StackOverflowError

阅读属性 ,特别是关于getters / setters以及“后台”的部分。