我们有一个抽象的 Java 类(我们无法修改)AbstractClass
,我们想在 Kotlin 中实现它。一个要求是 Kotlin 实现可以使用 vanilla Jackson Databind序列化/反序列化为 JSON 。这导致我们进行了以下实现:
class MyClass(private val data: MyClassData? = null) : AbstractClass<MyClassData>(MyClass::class.java, "1") {
data class MyClassData(var name: String = "", var age: Int = 0) : AbstractData
override fun getData(): MyClassData? {
return data
}
}
此类将始终从 Java 中使用,目前您可以像这样 (Java) 实例化它:
MyClass myClass = new MyClass(new MyClassData("John Doe", 25));
但我们更愿意像这样实例化它:
MyClass myClass = new MyClass("John Doe", 25);
我当然可以将 Kotlin 代码更改为如下所示:
class MyClass(@JsonIgnore private var name: String = "", @JsonIgnore private var age: Int = 0) : AbstractClass<MyClassData>(MyClass::class.java, "1") {
data class MyClassData(var name: String = "", var age: Int = 0) : AbstractData
private var data : MyClassData? = null
init {
data = MyClassData(name, age)
}
override fun getData(): MyClassData? {
return data
}
}
但这非常冗长,有点违背了使用 Kotlin 的目的。
我想我想做的是这样的(伪代码):
class MyClass(private val data: MyClassData? = null by MyClassData) : AbstractClass<MyClassData>(MyClass::class.java, "1") {
data class MyClassData(var name: String = "", var age: Int = 0) : AbstractData
override fun getData(): MyClassData? {
return data
}
}
(注意构造函数by MyClassData
中的MyClass
显然不起作用)
即我想以某种方式破坏或委托 MyClass 的构造函数以采用与 MyClassData 相同的参数而不复制它们。这是您可以在 Kotlin 中做的事情,还是有另一种方法可以在不添加太多代码的情况下解决它?