I have define the data class as:
data class chatModel(var context:Context?) {
var chatManger:ChatManager?=null
//getter
get() = chat
It is important to remember that referring to chatManger
ANYWHERE in the code ends up calling getChatManger()
or setChatManger()
, including inside of the getter or setter itself. This means your code will end up in an infinite loop and cause a StackOverflowError
.
Read up on Properties, specifically the section about getters/setters as well as the "backing field".
You call the setter inside of the setter.. a.k.a. infinite loop:
set(value) {
/* execute setter logic */
chatManger = value
}
Inside a property getter or setter there is an additional variable available: field
. This represents the java backing field of that property.
get() = field
set(value) {
field = value
}
With a regular var property, these getters and setters are auto-generated. So, this is default behaviour and you don't have to override getter / setter if all you do is set the value to a field.