Kotlin接口中的Gson序列化DNAME

Kotlin接口中的Gson序列化DNAME,kotlin,serialization,interface,gson,data-class,Kotlin,Serialization,Interface,Gson,Data Class,有没有办法在Kotlin接口中使用gson SerializedName注释 interface User { @SerializedName("user_id") val userId: String? } data class MainUser(override val userId: String? = null) : User 我知道注释可以在子类中,但这不是我想要的,因为有许多类扩展了该接口 注1: 使用抽象类或开放类作为数据类的父类可以解决这个问题,但新的问题是父类中

有没有办法在Kotlin接口中使用gson SerializedName注释

interface User {
   @SerializedName("user_id")
   val userId: String?
}

data class MainUser(override val userId: String? = null) : User
我知道注释可以在子类中,但这不是我想要的,因为有许多类扩展了该接口

注1:
使用抽象类或开放类作为数据类的父类可以解决这个问题,但新的问题是父类中重写的equals()方法永远不会被调用(mainUser1==mainUser2永远不要检查抽象类或开放类用户中的equals()方法)

我认为,这不是一个拥有属性(或状态)的好地方。接口非常适合建立行为(功能)。我建议您使用抽象类来实现您的目的,它将按照您的预期工作。

您可以使用
@get
对属性getter进行如下注释:

interface User {
    @get:SerializedName("user_id")
    val userId: String?
}

data class MainUser(override val userId: String? = null) : User

同意,但请注意,子对象是一个数据类。为数据类的父类创建抽象类或开放类的问题是,重写的equals()方法从未被调用。(而且接口也不保留状态)我只能说我不同意。接口中的属性只是类需要实现的方法,没有理由在它们之后要求
()
。见例;如果让它成为
有趣的
而不是
val
,你会赢得什么?在这里使用接口作为父级并不理想,但不幸的是,这是迄今为止我发现的唯一一种可以处理equals()的方法。看看这个线程,Gson不会这样解析它