我使用Java库来定义名为A
的JSON模型类。这个类包含很多属性,例如:例如,从String
到a
命名的26 z
个属性,并且没有针对它们的构造函数。
我想在Kotlin中使用新的JSON属性扩展此类lateinit var aa: String
(派生类将为B
),并且可以快速创建{的实例{1}}通过复制现有B
实例的属性。
我可以序列化A
并将结果JSON反序列化为A
。是否还有其他快速解决方案可以在没有序列化/反序列化的情况下执行此操作,例如:使用任何Kotin / Java方法或Intellij IDEA设施?
答案 0 :(得分:2)
假设您只有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")
}
}