用父类的实例属性初始化子类Kotlin类的快速方法
我使用Java库定义名为A
的JSON模型类。这个类包含很多属性,例如,从a
到z
,并且没有它们的构造函数。用父类的实例属性初始化子类Kotlin类的快速方法
我想在科特林一个新的JSON财产继承这个类,lateinit var aa: String
(派生类会B
),并有一个快速的方式通过复制现有A
实例的属性来创建的B
一个实例。
我可以序列化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")
}
}
以上是 用父类的实例属性初始化子类Kotlin类的快速方法 的全部内容, 来源链接: utcz.com/qa/258522.html