我刚刚写了这个,就它本身而言还不错:
但是,如果可能的话,我想坚持要求所有扩展
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
添加一个构造函数,那么所有的子类都必须调用这个父类构造函数,但是我认为这并没有什么帮助。 - s1m0nw1bookingId
,为什么不完全删除默认构造函数呢?那么它还有什么用处呢?相反,可以为其设置一个默认值吗? - SourabhBatchJobPayload
的子类:直接使用主构造函数和间接地使用仅具有 JSON 字符串的情况,该字符串是调用现有实例上的toJson
的结果。请参见序列化。 - gtod