Intereting Posts
LibGDX Scene2d UI: проблемы с таблицей внутри таблицы Аутентификация Firebase для Android Val не может переназначить ошибку времени компиляции для локальной переменной в fun в kotlin Котлин, когда () локальное переменное введение Почему мы не можем отметить видимость класса как «защищенного» в котлин? Почему модификатор Kotlin «open» несовместим с «данными»? Kotlin: Как можно получить доступ к функциям расширения внутри одного типа извне? Функция аннотирования интерфейса, которая должна вызывать супер Котлин: Применить против С Kotlin Невозможно создать поле @Autowired в классе, которое аннотируется с @Configuration @EnableWebMvc Котлин – ожидание объявления участника Передача лямбды в качестве аргумента в Кодеин Ошибка в моей первой таблице в котлине В nougat Failure возвращает результат ResultInfo {}} в действие {com.example. *. * / Com.example. *. *. MainActivity}: Тестирование Kotlin в студии android

Быстрый способ инициализации дочернего класса 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") } }