Intereting Posts
Претендент свойства lateinit не был инициализирован с помощью EasyMVP, Robolectric и Kotlin MissingMethodInvocationException тестирование открытого класса в Котлине Kotlin: Сделать внутреннюю функцию видимой для модульных тестов Как использовать инъекцию зависимостей с помощью Kotlin для таргетинга JavaScript? Как скомпилировать код Kotlin-JS с сопрограммами? Проблемы с доступом к сопутствующему объекту Kotlin в Groovy? Разница между нитью и сопрограммой в Котлине Почему строка json null, когда я передаю внутренний объект Gson (). ToJson (object) в Kotlin? Intellij IDEA не останавливается на контрольных точках Kotlin при работе с JUnit kotlin, как добавить функцию расширения к уже определенному классу сопутствующего объекта попробуйте makeSceneTransitionAnimation в котлин Firebase Android – создайте пользователя с помощью электронной почты и пароль в Kotlin Не удается сохранить выбранное состояние зрения в BaseAdapter с помощью Kotlin Проблема с расширением метода в скрипте Котлин Kotlin: Какие возможности Java 8 еще не поддерживаются?

Быстрый способ инициализации дочернего класса Kotlin с свойствами экземпляра родительского класса

Я использую библиотеку Java, которая определяет класс модели JSON с именем A Этот класс содержит много свойств, например, 26 свойств String названных от a до z и не имеет для них конструктора.

Я хотел бы расширить этот класс в Kotlin с новым свойством JSON, lateinit var aa: String (производный класс будет B ) и иметь быстрый способ создать экземпляр B путем копирования свойств существующего экземпляра A

Я могу сериализовать A и десериализовать полученный JSON на B Существуют ли другие быстрые решения для этого без сериализации / десериализации, например, с использованием любых методов Kotin / Java или Intellij IDEA?

Предполагая, что у вас есть только 1 конструктор, вы здесь:

 inline fun <reified D> convert(c: Any) : D { val list = mutableListOf<Any>() c::class.java.declaredFields.forEach { it.isAccessible = true list.add(it.get(c) as String) it.isAccessible = false } val constructor = D::class.java.declaredConstructors[0] return constructor.newInstance(*list.toTypedArray()) as D } 

Полное использование:

 package com.erezbiox1 fun main(args: Array<String>){ val A = A("Hey", "Hello") val B = convert<B>(A) B.print() } inline fun <reified D> convert(c: Any) : D { val list = mutableListOf<Any>() c::class.java.declaredFields.forEach { it.isAccessible = true list.add(it.get(c) as String) it.isAccessible = false } val constructor = D::class.java.declaredConstructors[0] return constructor.newInstance(*list.toTypedArray()) as D } class A(val a: String, val b: String){ fun print(){ println("Value is: $a, $b") } } class B(val a: String, val b: String) { fun print(){ println("Value is: $a, $b") } }