我的应用程序中有下一个数据类:
data class CarouselItem(
val url: String,
val pictureId: String,
val visible: String,
val id : String = UUID.randomUUID().toString()
)
我从 CarouselItems 的后端列表中获取。它们包含前 3 个字段(url、pictureId 和visible)。我想另外向所有创建的对象添加字段 id,并向它们添加随机唯一 id 值。 (希望避免用另一个类包装此类)
我希望这段代码能够工作,但实际上并没有生成 id。我也尝试像这样添加它:
data class CarouselItem(
val url: String,
val pictureId: String,
val visible: String
) {
val id: String = UUID.randomUUID().toString()
}
但这并没有帮助。 id 字段仍然为空。 为了解决这个问题,我在代码中添加了 for 循环来遍历列表并添加这些值。
我很好奇,为什么这不起作用。有什么方法可以将这些值添加到数据类中吗?在我看来,它看起来更干净。谢谢
最佳答案
CommonsWare 是正确的,因为 Gson 通过反射创建对象,这就是为什么没有分配这些默认值的原因。 Moshi 是另一个支持此功能的适配器,但更换 retrofit 适配器可能是一项艰巨的工作。
由于此 id 字段实际上并未在序列化中使用,因此这可能是一种快速替代方案
data class CarouselItem(
val url: String,
val pictureId: String,
val visible: String
) {
val id: String by lazy { UUID.randomUUID().toString() }
}
Lazy在第一次调用之前不会分配值,任何后续调用都会返回相同的值,因此 id 将保持不变。
关于Android Kotlin 向数据类添加具有值的附加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70788793/