University 必须扩展 Building[T] 而不仅仅是 Building
case class University[T](a: Building[T], b: Building[T], c: T) extends Building[T]
这是完整的代码
abstract class Building[T]
case class University[T](a: Building[T], b: Building[T], c: T) extends Building[T]
在u 函数中输出类型为Building[B]。您正在返回 University[B] 但 University[B] 采用 a 是 Building[B] b 又是 Building[B] 和 c 这是 B。
n.a 返回Building[A] 而不是Building[B],所以University[B] 需要两个Building[B] 和一个B。您不能通过n.a、n.b 和n.c 来创建university[B]。
为了编译代码,我更改了输出类型并返回University[B]
def u[A,B](a: Building[A]): Building[A] = a match {
case n: University[A] => University[A](n.a, n.b, n.c);
}
正确代码
abstract class Building[T]
case class University[T](a: Building[T], b: Building[T], c: T) extends Building[T]
def convert[A, B](a: A): B = ???
def bConvert[A, B](building: Building[A]): Building[B] = ???
def u[A,B](a: Building[A]): Building[B] = a match {
case n: University[A] => University[B](bConvert(n.a), bConvert(n.b), convert(n.c));
}