我有以下类定义,C定义为采用协方差类型参数+ T,我尝试将另一个构造函数方法定义为快捷方式,但我无法使其与类型T一起使用。
class C[+T](val value: T, children: List[C[T]]) {
def this(value: T) = this(value, Nil) //it fail with covariant type not allowed here
def this[U >: T](value: U) = this(value, Nil)//it fail with can't find symbol U
def replace[U >: T](t: U) = new C(t, children) //it success
}
我认为第二个应该像替换方法一样工作,但它没有。可能有人解释这背后的原因,为什么替换工作但不是这个?以及正确的方法。感谢。
答案 0 :(得分:0)
为什么替换工作而不是这个?
构造函数无法获取类型参数(这是我在2.10而不是can't find symbol U
中获得的消息)。但即使可以,replace
返回C[U]
,构造函数也必须返回C[T]
。
以及正确的方法
将它作为伴侣对象中的方法:
object C {
def apply[U](value: U) = new C(value, Nil) // note that you no longer need T here
}