我有一个简单的层次结构,包括以下内容:
- 抽象类 BaseItem
- 开放类 Item : BaseItem
- 类 Backpack : Item
它们都应该与 Kotlinx Serialization 一起工作。直到我添加了 Backpack
类为止一切都很顺利。
我使用的是 Kotlinx Serialization 的版本 1.4.32
。
以下是我的类层次结构的详细信息
// Items.kt
@Serializable
sealed class BaseItem {
abstract val id: String
abstract val type: ItemType
abstract var brand: String
abstract var model: String
abstract var imageLink: String
abstract var traits: MutableList<Trait>
abstract var implicitTraits: MutableList<Trait>
abstract var details: MutableMap<String, String>
}
@Serializable
open class Item(
override val id: String = UUID.randomUUID().toString(),
override val type: ItemType = ItemType.UNDEFINED,
override var brand: String,
override var model: String,
override var imageLink: String,
override var traits: MutableList<Trait>,
override var implicitTraits: MutableList<Trait>,
override var details: MutableMap<String, String>,
) : BaseItem()
@Serializable // is marked as incorrect
class Backpack(
brand: String,
model: String,
imageLink: String,
traits: MutableList<Trait>,
implicitTraits: MutableList<Trait>,
details: MutableMap<String, String>,
var volume: Int
) : Item(
type = ItemType.BACKPACK,
brand = brand,
model = model,
imageLink = imageLink,
traits = traits,
implicitTraits = implicitTraits,
details = details
)
IDE对附加在
Backpack
类上的@Serialization
注解显示了以下消息。This class is not serializable automatically because it has primary constructor parameters that are not properties
我无法弄清楚正确的工作方式是什么。
BackPack
无法扩展Item
并且也无法序列化。您可能需要按照 Big_Foot1989 的建议调整类层次结构。 - dnault