Kotlin界面中的Gson SerializedName

时间:2019-09-05 00:29:00

标签: 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: 使用abstract或open类作为数据类的父级可以解决此问题,但是新问题将是父级中被覆盖的equals()方法永远不会被调用(mainUser1 == mainUser2永远不会在abstract或open中检查equls()方法类User)

2 个答案:

答案 0 :(得分:3)

我认为,接口不是拥有属性(或状态)的好地方。接口非常适合建立行为(功能)。我宁愿建议您将抽象类用于您的目的,并且它将按预期工作。

答案 1 :(得分:0)

您可以使用@get use-site target来注释属性获取器:

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

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