如何根据第四个辅助构造函数中的值进行条件超级调用? 为什么这不起作用?
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
}
答案 0 :(得分:3)
当你的if
表达式被传递时,这不会起作用,因为构造函数的参数没有唯一的类型,除了Any
,这是最常见的类型。您收到错误,因为没有匹配的构造函数期望Any
作为参数。
constructor(intOrString:Boolean):
super( if(intOrString) 3 else "hey")
与Java相同,进行有条件的超级调用是不可能的。必须直接初始化超类型,documentation告诉:
如果类没有主构造函数,那么每个辅助构造函数 必须使用super关键字初始化基本类型,或委托给>这样做的另一个构造函数。请注意,在这种情况下不同 辅助构造函数可以调用基类型的不同构造函数