Android Kotlin 向数据类添加具有值的附加字段

标签 android kotlin data-class

我的应用程序中有下一个数据类:

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/

相关文章:

android - 为什么 Kotlin 中某些 GlobalScope.launch 调用的内容静默执行失败?

java - Jackson JsonIgnore 在 kotlin 中不起作用

android - 将 Firebase 数据快照反序列化为 Kotlin 数据类

android - 加密 - 整个文件或单个字段?

android - 如何显示列出所有文件夹而不是路径中的文件

java - 为什么我收到错误 : java. lang.RuntimeException : java. lang.IllegalStateException : RecyclerView has no LayoutManager on (HelpActivity. java:28)

java - 无法访问自定义 View 类中的方法

kotlin - 耗材 channel

constructor - Kotlin数据类便捷构造函数

java - Kotlin 解构变量不适用于 Pair、Triple 或数据类