【发布时间】:2017-09-08 14:26:28
【问题描述】:
我刚刚写了这个,就目前而言还不错:
import com.github.salomonbrys.kotson.get
import com.github.salomonbrys.kotson.int
import com.github.salomonbrys.kotson.jsonObject
import com.google.gson.JsonElement
import com.google.gson.JsonObject
abstract class BatchJobPayload {
abstract fun toJson(): JsonObject
}
class BookingConfirmationMessagePayload(val bookingId: Int) : BatchJobPayload() {
constructor(payload: JsonElement) : this(payload["bookingId"].int)
override fun toJson() = jsonObject(
"bookingId" to bookingId
)
}
但我想坚持,如果可能的话,所有扩展 BatchJobPayload 的类都实现一个带有签名的辅助构造函数
constructor(payload: JsonElement): BatchJobPayload,用于反序列化。
BookingConfirmationMessagePayload 有这样的构造函数只是因为我把它放在那里,而不是因为BatchJobPayload 坚持它...
【问题讨论】:
-
我不认为你可以这样做..如果你给
BatchJobPayload一个构造函数,所有子类都必须调用这个超级构造函数,但我认为它没有帮助 -
强制两个构造函数是没有意义的。如果您希望有人总是通过
bookingId,为什么不完全删除默认构造函数呢?那它有什么作用呢? Insead 为它设置了一个默认值,也许吧? -
@Sourabh 的目的是始终有 两种 方法来创建
BatchJobPayload的子类:直接使用主构造函数并间接使用当你只有一个 JSON 字符串时是在现有实例上调用toJson的结果。见serialization。
标签: kotlin