Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在kotlin中处理getter和setter时出错_Android_Kotlin_Getter Setter_Getter - Fatal编程技术网

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

Android 在kotlin中处理getter和setter时出错,android,kotlin,getter-setter,getter,Android,Kotlin,Getter Setter,Getter,我已将数据类定义为: data class chatModel(var context:Context?) { var chatManger:ChatManager?=null //getter get() = chatManger //setter set(value) { /* execute setter logic */ chatManger

我已将数据类定义为:

  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()
//二传手

new chatModel().setJId("jid")
编辑:

正如@yole所暗示的那样。我使用setter和getter作为:

//设置数据

var chatDetails:chatModel=chatModel(mApplicationContext)
 chatDetails.chatManger=chatManager
但是最终得到java.lang.StackOverflower错误:在

com.example.itstym.smackchat.Model.chatModel.setChatManger(chatModel.kt:38)
第38行指向

chatManger = value
这个

@罗布科建议

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

data class chatModel(var context: Context?) {


    var chatManger:ChatManager

    get() = field
    set(value) {
        field=value
    }
}
//设置数据

    chatModel(mApplicationContext).chatManger=chatManager
//在不同的活动中获取数据

chatModel(applicationContext).chatManger

但是必须初始化getting error属性。如果我把它赋值为null,那么我得到的是null而不是设置的值

重要的是要记住,在代码中的任何地方引用
chatManger
都会调用
getChatManger()
setChatManger()
,包括getter或setter本身的内部。这意味着您的代码将以无限循环结束,并导致堆栈溢出错误


仔细阅读,特别是关于getter/setter以及“backing field”的部分。重要的是要记住,在代码中的任何地方引用
chatManger
都会调用
getChatManger()
setChatManger()
,包括getter或setter本身的内部。这意味着您的代码将以无限循环结束,并导致堆栈溢出错误


仔细阅读,特别是关于getter/setter以及“backing field”的部分。

您在setter中调用setter。。a、 k.a.无限循环:

    set(value) {
        /* execute setter logic */
        chatManger = value
    }
在属性getter或setter中还有一个附加变量可用:
字段
。这表示该属性的java

    get() = field
    set(value) {
        field = value
    }
使用常规var属性,这些getter和setter是自动生成的。
因此,这是默认行为,如果只需将值设置为字段,则不必重写getter/setter

您在setter内部调用setter。。a、 k.a.无限循环:

    set(value) {
        /* execute setter logic */
        chatManger = value
    }
在属性getter或setter中还有一个附加变量可用:
字段
。这表示该属性的java

    get() = field
    set(value) {
        field = value
    }
使用常规var属性,这些getter和setter是自动生成的。
因此,这是默认行为,如果只需将值设置为字段,则不必重写getter/setter

澄清一下,您这样做是因为您想保留
数据类提供的功能(toString、equals、copy等),同时还要添加自定义setter逻辑吗?是的。我还想将数据类用于getter和setter@zsmb13@zsmb13我更新了我的问题。澄清一下,你这样做是因为你想保留
数据类
提供的功能(toString、equals、copy等),同时还要添加自定义setter逻辑吗?是的。我还想将数据类用于getter和setter@zsmb13@zsmb13我必须更新我的问题。@AnkurKhandelwal“如果我将其赋值为null,那么我得到的是null而不是设置的值。”这是因为您每次都创建一个新实例,所以下一个实例将不会设置字段。Try:
val chatModel=chatModel(mApplicationContext);chatModel.chatManger=chatmanager;val chatManager=chatModel.chatManager。这是关于基本实例管理的,而不是关于自定义getter/setter。但也请不要重复我的最后一段:如果自定义getters setter所做的只是设置一个字段,那么就不需要自定义getters setter。那么我将如何在另一个活动中访问设置的值。在另一个活动中,我必须创建chatModel数据类的新实例。将值重新初始化为null@AnkurKhandelwal这又是一个不同的问题:“如何通过活动持久化对象”。你可能想要一个单身汉。科特林让这件事变得简单。我知道了。谢谢,@RobCo。我对他们俩都感到困惑。谢谢。抱歉打扰您。@AnkurKhandelwal“如果我将其赋值为null,那么我得到的是null而不是设置的值。”这是因为您每次都创建一个新实例,所以下一个实例将不会设置字段。Try:
val chatModel=chatModel(mApplicationContext);chatModel.chatManger=chatmanager;val chatManager=chatModel.chatManager。这是关于基本实例管理的,而不是关于自定义getter/setter。但也请不要重复我的最后一段:如果自定义getters setter所做的只是设置一个字段,那么就不需要自定义getters setter。那么我将如何在另一个活动中访问设置的值。在另一个活动中,我必须创建chatModel数据类的新实例。将值重新初始化为null@AnkurKhandelwal这又是一个不同的问题:“如何通过活动持久化对象”。你可能想要一个单身汉。科特林让这件事变得简单。我知道了。谢谢,@RobCo。我对他们俩都感到困惑。谢谢。对不起,打扰你了。