Глубокая копия объекта Realm в Kotlin - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу дублировать объект области, а затем изменить второй, не переназначая все ключи. Как я могу это сделать? 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

1 Ответ

1 голос
/ 21 апреля 2020

Можете ли вы предоставить больше контекста и соответствующей информации, поскольку я не вижу и массивов в вашем выражении кода. Спасибо.

РЕДАКТИРОВАТЬ

Поскольку Money не является классом данных, у вас нет автоматически генерируемой функции copy (), что оставляет вам две опции:

  1. Создайте пользовательскую функцию copy () в классе Money. Это может быть обыденно, если в классе огромное количество полей.
  2. Используйте сторонние библиотеки, и в этом случае вы добавите внешнюю зависимость к вашему RealmObject.

Что я предложит это легко: попробуйте преобразовать ваш Money.class в класс данных. Вы получите автоматически сгенерированные функции, и по идее, они будут работать, так как RealmObjects должны быть парами ключ-значение.

EDIT

Вы можете использовать сериализацию / десериализацию библиотеки 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()
...