相关疑难解决方法(0)

为什么参数处于逆变位置?

我试图在trait中使用covariant类型参数来构造一个case类,如下所示:

trait MyTrait[+T] {
  private case class MyClass(c: T)
}
Run Code Online (Sandbox Code Playgroud)

编译说:

error: covariant type T occurs in contravariant position in type T of value c
Run Code Online (Sandbox Code Playgroud)

然后我尝试了以下但它也没有用:

trait MyTrait[+T] {
  private case class MyClass[U <: T](c: U)
}
Run Code Online (Sandbox Code Playgroud)

这次的错误是:

error: covariant type T occurs in contravariant position in type >: Nothing <: T of type U
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么T在这里处于协变位置并建议解决这个问题吗?谢谢!

scala covariance contravariance case-class

31
推荐指数
2
解决办法
7090
查看次数

协变型T出现在逆变位置

我知道之前已经问过这个问题,但是答案不适用于这种情况,或者我不理解它们.

基本上,为什么以下(重新创建我的问题的简单示例)不起作用?

class Test[+T] {
    var list: List[T] = _
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我有一个对象,我想传递一个Test [Nothing]的实例(空的测试),除非我在T中使用Test co-variant,否则这不起作用.

scala

18
推荐指数
1
解决办法
5367
查看次数

标签 统计

scala ×2

case-class ×1

contravariance ×1

covariance ×1