【问题标题】:Deep copy Realm object in KotlinKotlin 中的深拷贝领域对象
【发布时间】:2020-04-21 13:54:54
【问题描述】:

我想复制领域对象,然后更改第二个,而不重新分配所有键。我怎样才能做到这一点? RealmObject 没有 .copy().clone() 方法。

// Money is not data class and has ∞ fields which will be boring to re-assign

val money = Money()
money.amount = 1000

...

val anotherMoney = money
anotherMoney.amount = 500

println(money.amount) // prints 500

【问题讨论】:

    标签: android kotlin realm


    【解决方案1】:

    您能否提供更多上下文和适当的信息,因为我在您的代码语句中没有看到和数组。谢谢。

    编辑

    由于 Money 不是数据类,因此您没有可用的自动生成的 copy() 函数,因此您有两个选择:

    1. 在 Money 类中创建一个自定义的 copy() 函数。如果类中有大量字段,这可能是平凡的。
    2. 使用 3rd 方库,在这种情况下,您将向 RealmObject 添加外部依赖项。

    我的建议很简单:尝试将 Money.class 转换为 Data 类。您将获得自动生成的函数,并且习惯上它会像 RealmObjects 应该是键值对一样工作。

    编辑

    您可以使用 GSON 库的序列化/反序列化并破解您的问题来解决您的问题(虽然这是一种破解方法,但会完成它的工作):

    fun clone(): Money {
      val stringMoney = Gson().toJson(this, Money::class.java)
      return Gson().fromJson<Money>(stringMoney, Money::class.java)
    }
    

    用法:

    val originalMoney = Money()
    val moneyClone = originalMoney.clone()
    

    【讨论】:

    • 提供的代码是示例。数组只是一个额外的案例。
    • RealmObject 类data class 没有变体,因为它需要是open class。您能否举一个实际有效的 Kotlin 第三方库示例?而且我也找不到 copy() 函数的正确示例。非常感谢!
    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多