假设我定义了以下特征和类:
trait A {
val x: Int
}
trait B[T <: A] {
val a: T
}
class C[T1 <: A, T2 <: B[T1]](b: T2) {
}
然后我按如下方式实现A和B:
case class MyA(x: Int) extends A
case class MyB(a: MyA) extends B[MyA]
现在,当我尝试使用以下类创建C实例时:
val b = MyB(MyA(3))
new C(b)
编译器无法从我的对象推断类型参数,给我以下错误:
推断类型参数[Nothing,MyB]不符合C类的类型参数边界[T1 <:A,T2 <:B [T1]]
难道我不得不明确提供以下类型吗?
new C[MyA, MyB](b)