Forma rápida de inicializar la class Kotlin secundaria con las properties de instancia de la class principal

Yo uso la biblioteca Java que define una class de model JSON llamada A Esta class contiene muchas properties, por ejemplo, 26 properties de String nombradas de z y no tiene un constructor para ellas.

Me gustaría extender esta class en Kotlin con una nueva propiedad JSON, lateinit var aa: String (la class derivada será B ), y tener una forma rápida de crear una instancia de B copyndo las properties de la instancia A existente.

Puedo serializar A y deserializar el JSON resultante a B ¿Hay alguna otra solución rápida para hacer esto sin serializar / deserializar, por ejemplo, usando cualquier método Kotin / Java o las instalaciones de Intellij IDEA?

Suponiendo que solo tienes 1 constructor, aquí tienes:

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

Uso completo:

 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.declanetworkingFields.forEach { it.isAccessible = true list.add(it.get(c) as String) it.isAccessible = false } val constructor = D::class.java.declanetworkingConstructors[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") } } 
  • Maneras de ofuscar el acceso a miembros de la class preferentemente privados, pero en realidad públicos, con el fin de utilizarlos en methods en línea
  • Tipo de elemento de testing de un contenedor en kotlin
  • Interoperabilidad de Kotlin-JS: uso de construcciones de lenguaje
  • Sitio de Android: cada variable de enlace en la consulta debe tener un método de coincidencia
  • Clases de objects nesteds de Kotlin
  • cuándo utilizar lateinit, init block y el object complementario. Kotlin
  • Extensiones de Kotlin para Android y fragments retenidos
  • ¿Cómo puedo ofuscar mi sdk codificado con kotlin (y deshacerme de Metadata)
  • Android Dagger 2.11 con Kotlin, problema de publicación de ContributesAndroidInjector
  • Atributo Kotlin RuntimeInvisibleParameterAnnotations: MyType (String)
  • ¿Cómo agrupar la statement duplicada en .aplicar en Kotlin?