我知道之前曾有人问过这个问题,但答案不适用于这种情况,或者我听不懂。
基本上,下面的(重新创建我的问题的简单示例)为什么不起作用?
class Test[+T] {
var list: List[T] = _
}
我遇到的问题是我有一个对象,我想在其中传递Test [Nothing](空Test)的实例,除非我在T中使Test成为协变量,否则这是行不通的。
最佳答案
在T
中使测试成为协变量意味着对于任何Test[A]
,Test[Any]
是A
的子类型。因此,让我们创建一个Test
:
val test_string = new Test[String]
现在我们有了一个
Test[String]
,并且所包含的list
是List[String]
类型。由于
Test[String]
是Test[Any]
的子类型,因此应允许以下内容:val test_any : Test[Any] = test_string
现在,我们有了一个
Test[Any]
,因此test_any.list
的类型为List[Any]
,这意味着以下内容应有效:test_any.list = List[Any]()
这意味着我们只是为test_strings列表成员分配了一个
List[Any]
,这是不允许的,因为它应该是List[String]
,而不是List[Any]
。这也意味着您可以在列表之前添加任何内容,因为它是List[Any]
类型。
关于scala - 协变类型T发生在相反位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14584830/