【发布时间】:2026-01-22 01:05:01
【问题描述】:
我正在尝试在特征中使用协变类型参数来构造一个案例类,如下所示:
trait MyTrait[+T] {
private case class MyClass(c: T)
}
编译器说:
error: covariant type T occurs in contravariant position in type T of value c
然后我尝试了以下方法,但也没有用:
trait MyTrait[+T] {
private case class MyClass[U <: T](c: U)
}
这次的错误是:
error: covariant type T occurs in contravariant position in type >: Nothing <: T of type U
有人可以解释为什么 T 在这里处于协变位置并为这个问题提出解决方案吗? 谢谢!
【问题讨论】:
-
你能解释一下你真正想要做什么吗?为什么要 T 协变而不是不变?
标签: scala covariance contravariance case-class