Android 可以将数据类与init{}和Gson一起使用

Android 可以将数据类与init{}和Gson一起使用,android,kotlin,gson,init,data-class,Android,Kotlin,Gson,Init,Data Class,我有一个数据类 data class CardHistoryModel( val serviceType: String? = null, var title: String? = null ) { init { title = when (serviceType) { "CARD_TO_CARD" -> "CARD" "CARD_TO_ACCOUNT" -> "ACCOUNT"

我有一个数据类

data class CardHistoryModel(
    val serviceType: String? = null,
    var title: String? = null
) {
    init {
        title = when (serviceType) {
            "CARD_TO_CARD" -> "CARD"
            "CARD_TO_ACCOUNT" -> "ACCOUNT"
            else -> "NON"
        }
    }
}
我从服务器得到响应,并使用Gson和改装转换为CardHistoryModel.kt

我需要用“serverType”填充“title”变量

使用上述代码时,serviceType为null


在使用Gson从JSON解析数据之后,我可以使用init函数吗?

我尝试了一些使用Gson的测试,似乎正在调用init,但是还没有设置serviceType,所以当使用else->NON时

我不认为您可以或应该在创建对象后调用init,但根据您想要做的事情,还有其他选择

例如,您可以创建一个中间类,如下所示:

数据类RemoteCardHistoryModel val服务类型:字符串?=无效的 数据类CardHistoryModel val服务类型:字符串?=无效的 变量标题:字符串?=无效的 { 构造函数记录:RemoteCardHistoryModel:此 远程服务类型, 当remote.serviceType{ 卡到卡->卡 卡到账户->账户 其他->非 } } 或者您可以动态计算标题。。。如果仅通过serviceType设置标题,则可以执行以下操作:

数据类CardHistoryModel val服务类型:字符串?=无效的 { val title:String by lazy{ 当服务类型{ 卡到卡->卡 卡到账户->账户 其他->非 } } } 或者,如果您需要在初始化后手动更改标题,这应该可以:

数据类CardHistoryModel val服务类型:字符串?=无效的 私有变量_标题:字符串?=无效的 { 变量标题:字符串 获取=\u标题?:当服务类型{ 卡到卡->卡 卡到账户->账户 其他->非 } 设定值{ _标题=价值 } }
最后一个建议的唯一问题是title永远不会为null

您的init函数将用于CardHistoryModel的每个实例化,serverType是什么?您是指serviceType吗?我使用Gson时serviceType是正确的,未调用init