扩展类条件分支超值的Kotlin二级构造函数

你如何根据第四个二级构造函数中的值有条件超级调用? 为什么这不工作?

open class SecondaryConstructors{ constructor(i:Int) constructor(s:String) } class SecondaryExtended:SecondaryConstructors { constructor(i:Int):super(i) constructor(s:String):super(s) constructor():super(if(true)1 else 0) constructor(intOrString:Boolean):super( if(intOrString) 3 else "hey") // conditional branch result of int/string is implicitly cast to Any // error - none of the following functions can be called with the arguments supplied } 

这将不会像你的表达式作为构造函数的参数传递没有唯一的类型,除了最常见的类型的任何东西。 你得到一个错误,因为没有一个匹配的构造函数期望Any作为参数。

 constructor(intOrString:Boolean): super( if(intOrString) 3 else "hey") 

和Java一样,做一个有条件的超级调用是不可能的。 超级类型必须直接初始化,正如文档所述 :

如果类没有主构造函数,那么每个次构造函数都必须使用super关键字来初始化基类型,或者委托给另一个构造函数。 请注意,在这种情况下,不同的二级构造函数可以调用基类型的不同构造函数