无法编译内部构造函数调用原因:预期主构造函数调用

Chr*_*iss 5 constructor compilation kotlin

假设我们有以下主要和次要构造函数:

open class Animal(val name:String){
  internal constructor(message:InputStream): this(readName(message))
}
Run Code Online (Sandbox Code Playgroud)

为什么不能调用超类的内部构造函数?

class Dog(name:String):Animal(name){
   internal constructor(message:InputStream):super(message)
                                             ^^^^^
                                             Primary constructor call expected
}
Run Code Online (Sandbox Code Playgroud)

编辑

显然,当主构造函数转换为辅助构造函数或完全删除时,它会编译。

class Dog:Animal{
   constructor(name:String):super(name)
   internal constructor(message:InputStream):super(message)

}
Run Code Online (Sandbox Code Playgroud)

这是编译器错误吗?

Bar*_*ski 6

文档

如果类具有主构造函数,则每个辅助构造函数都需要直接或通过另一个辅助构造函数间接委托给主构造函数。委托给同一类的另一个构造函数是使用this关键字完成的

和:

如果类没有主构造函数,则每个辅助构造函数都必须使用super关键字初始化基类型,或者委托给另一个执行此操作的构造函数。


您的Dog类有一个主构造函数,因此您必须使用this. 如果删除主构造函数,您将能够引用super构造函数:

class Dog : Animal {
    constructor(message: InputStream) : super(message)
}
Run Code Online (Sandbox Code Playgroud)

以上没有引起错误