我知道以前有人问过这个问题,但答案要么不适用于这种情况,要么我不明白。
基本上,为什么以下(重现我的问题的简单示例)不起作用?
class Test[+T] {
var list: List[T] = _
}
我遇到的问题是我有一个对象,我想在其中传递Test[Nothing]
(空Test
)的一个实例,除非我Test
在T
.
我知道以前有人问过这个问题,但答案要么不适用于这种情况,要么我不明白。
基本上,为什么以下(重现我的问题的简单示例)不起作用?
class Test[+T] {
var list: List[T] = _
}
我遇到的问题是我有一个对象,我想在其中传递Test[Nothing]
(空Test
)的一个实例,除非我Test
在T
.
使测试协变T
意味着 thatTest[A]
是Test[Any]
any的子类型A
。所以让我们创建一个Test
:
val test_string = new Test[String]
现在我们有了 aTest[String]
并且包含list
的是 type List[String]
。
由于Test[String]
是 的子类型Test[Any]
,因此应允许以下内容:
val test_any : Test[Any] = test_string
现在,我们有一个Test[Any]
,因此test_any.list
是 type List[Any]
,这意味着以下内容应该是有效的:
test_any.list = List[Any]()
这意味着我们只是将 a 分配List[Any]
给 test_strings 列表成员,这是不允许的,因为它应该是 a List[String]
,而不是 a List[Any]
。这也意味着您可以在列表中添加任何内容,因为它是 type List[Any]
。