用父类的实例属性初始化子类Kotlin类的快速方法
我使用定义名为A
的JSON模型类的Java库。 这个类包含很多属性,例如,从a
到z
命名的26个String
属性,并没有它们的构造函数。
我想在Kotlin中扩展这个类,并使用新的JSON属性lateinit var aa: String
(派生类将是B
),并且通过复制现有A
实例的属性可以快速创建B
的实例。
我可以序列化A
并将结果JSON反序列化为B
有没有其他的快速解决方案,这样做没有序列化/反序列化,例如通过使用任何Kotin / Java方法或Intellij IDEA设施?
假设你只有一个构造函数,在这里你去:
inline fun convert(c: Any) : D { val list = mutableListOf() 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){ val A = A("Hey", "Hello") val B = convert(A) B.print() } inline fun convert(c: Any) : D { val list = mutableListOf() 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 M11:在IntelliJ 14.1中禁止“function从未使用”
- 是否可以在Android Studio中将我的Kotlin文件移动到单独的包(源types)中?
- 运行配置的IntelliJ快捷方式
- 如何将Java文件转换为Kotlin文件?
- 是否有限制stdlib函数在Kotlin中的可见性?
- 如何在Intellij中导入目录/完整软件包以进行测试
- Kotlin NoClassDefFoundError和spring @RequestMapping方法
- 即使使用noarg插件,也没有使用Kotlin的JPA实体的默认构造函数
- Intellij Idea不会编译kotlin,但maven会这样做