在 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。