呼唤;超级(原型)“;从Java打开Kotlin数据DTO类

呼唤;超级(原型)“;从Java打开Kotlin数据DTO类,java,kotlin,Java,Kotlin,我有一个科特林班,类似于 data open class MyDto ( var property: String? = null // ... ) 以及扩展该类的Java类,类似于 class MySpecificDto extends MyDto { private String field; // getter/setter for "field" public MySpecificDto(final MyDto prototype) {

我有一个科特林班,类似于

data open class MyDto (
var property: String? = null
// ...
)
以及扩展该类的Java类,类似于

class MySpecificDto extends MyDto {
    private String field; 
    // getter/setter for "field"
    public MySpecificDto(final MyDto prototype)
    {
        super(prototype);
    }
}

Kotlin的DTO中缺少什么用于编译“super(prototype)”语句?

MyDto
的构造函数接受一个字符串类型的参数,您正试图向它传递一个
MyDto

我想你在找--

数据类似乎是DTO层次结构的逻辑基础。不幸的是,它们不能很好地处理继承问题,因此这样做不是一个好主意。看

更新以处理评论--

对于Kotlin端解决方案,您需要记住Kotlin类只允许一个构造函数。对于数据类,该构造函数的格式已经定义,因此不能只传递一个对象并使其工作,也不能定义另一个构造函数。此外,正如@bashor在对原始问题的评论中所指出的,没有复制构造函数。但是,如果需要,可以创建单独的函数来初始化对象--

在Java构造函数中调用
init
,而不是
super

public class MySpecificDto extends MyDto {
    private String field;

    public MySpecificDto(final MyDto prototype)
    {
        init(prototype);
    }
}

此解决方案的警告是,您的数据类必须为其所有属性提供默认值,因为存在对构造函数的隐式调用,且参数为零

Kotlin不会为数据类生成复制构造函数。super(prototype.getProperty())只将单个属性传递给构造函数,但我希望传递包含许多属性的整个prototype对象。另外,我正在寻找Kotlin代码的解决方案,而不是Java代码。
data open class MyDto (var property: String? = null //...) {
    fun init(dto: MyDto) {
        property = dto.property
        //... rest of the properties
    }
}
public class MySpecificDto extends MyDto {
    private String field;

    public MySpecificDto(final MyDto prototype)
    {
        init(prototype);
    }
}