簡體   English   中英

Kotlin字段覆蓋和GSON反序列化無法創建轉換器類異常

[英]Kotlin field overriding and GSON deserialization Unable to create converter class exception

我在Kotlin這樣的家長班

open class Prescription(
open var name: String,
open val id: String,
open var dose: JsonElement?,
open var schedule: JsonElement?,
open var notes: String?,
@SerializedName("as_needed")
open var isAsNeeded: Boolean,
open var archiveDate: Long?) {
constructor(name: String, dose: JsonElement?, schedule: JsonElement?, isAsNeeded: Boolean, notes: String?)
    : this(
    id = name.toLowerCase() + "-" + UUID.randomUUID().toString().subSequence(0, 6),
    name = name,
    dose = dose,
    schedule = schedule,
    isAsNeeded = isAsNeeded,
    archiveDate = null,
    notes = notes
)
}

像這樣的孩子班

class Medication(
    override var name: String,
    override var dose: JsonElement?,
    override var schedule: JsonElement?,
    override var isAsNeeded: Boolean,
    override var notes: String?,
    override var id: String,
    val other: String?,
) : Topic, Prescription(
    name = name,
    dose = dose,
    schedule = schedule,
    isAsNeeded = isAsNeeded,
    notes = notes
)

當我嘗試使用GSON反序列化Medication類時,我得到了IllegalArgumentExceptionMedicationdeclares multiple JSON fields named dose. 我不確定將override添加到字段時字段如何重復。 Kotlin + GSON中這樣做的正確方法是什么

class Medication(
     name: String,
     dose: JsonElement?,
     schedule: JsonElement?,
     isAsNeeded: Boolean,
     notes: String?,
     id: String,
     val other: String?,
) : Topic, Prescription(
    name,
    dose,
    schedule,
    isAsNeeded,
    notes
)

嘗試以上操作...在Medication類中,無需覆蓋變量。

作為名稱,劑量,時間表,isAsNeeded,注釋已在超類中聲明,因此無需覆蓋即可直接使用它們。

open class Prescription(
protected var name: String,
protected val id: String,
protected var dose: JsonElement?,
protected var schedule: JsonElement?,
protected var notes: String?,
@SerializedName("as_needed")
protected var isAsNeeded: Boolean,
protected var archiveDate: Long?) {
constructor(name: String, dose: JsonElement?, schedule: JsonElement?, isAsNeeded: Boolean, notes: String?)
    : this(
    id = name.toLowerCase() + "-" + UUID.randomUUID().toString().subSequence(0, 6),
    name = name,
    dose = dose,
    schedule = schedule,
    isAsNeeded = isAsNeeded,
    archiveDate = null,
    notes = notes
)
}

而且我相信在您的超類中保護您的var / val更可取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM