我在Kotlin中具有以下数据类:
import com.google.gson.annotations.SerializedName
data class RouteGroup(
@SerializedName("name") var name: String,
@SerializedName("id") var id: Int
)
有时我需要创建一个同时包含两个字段的对象,有时仅包含其中一个。
我该怎么做?
编辑
这不是此问题的重复项:Can Kotlin data class have more than one constructor? 该问题显示了如何为字段设置默认值。但就我而言,我不需要使用默认值对字段进行序列化。我希望仅在明确为其分配值时才对字段进行序列化。
答案 0 :(得分:3)
使用空值运算符很容易
import com.google.gson.annotations.SerializedName
data class RouteGroup @JvmOverloads constructor(
@SerializedName("name") var name: String? = null,
@SerializedName("id") var id: Int? = null
)
答案 1 :(得分:1)
您可能需要这样的东西:
sealed class RouteGroup
data class RouteGroupWithName(
@SerializedName("name") var name: String
) : RouteGroup()
data class RouteGroupWithId(
@SerializedName("id") var id: Int
) : RouteGroup()
data class RouteGroupWithNameAndId(
@SerializedName("name") var name: String,
@SerializedName("id") var id: Int
) : RouteGroup()
编辑1:
或者您可以使用可为空的字段和命名参数,如下所示:
data class RouteGroup(
@SerializedName("name") var name: String? = null,
@SerializedName("id") var id: Int? = null
)
val routeGroupWithName = RouteGroup(name = "example")
val routeGroupWithId = RouteGroup(id = 2)
val routeGroupWithNameAndId = RouteGroup(id = 2, name = "example")