scala – 协变型T发生在相反的位置

我知道这个问题已经被问过了,但是这个答案不适用于这种情况,或者我不明白。

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

class Test[+T] {
    var list: List[T] = _
}

我遇到的问题是我有一个对象,我想通过一个Test [Nothing](空的Test)的例子,除非我在T.

使T中的测试协变量表示Test [A]是任何A的Test [Any]的子类型。所以我们可以创建一个测试:

val test_string = new Test[String]

现在我们有一个Test [String],包含的列表是List [String]。

由于Test [String]是Test [Any]的子类型,因此应该允许:

val test_any : Test[Any] = test_string

现在,我们有一个测试[Any],因此test_any.list是List [Any],这意味着以下内容应该是有效的:

test_any.list = List[Any]()

这意味着我们刚刚为test_strings列表成员分配了一个List [Any],这不应该被允许,因为它应该是List [String],而不是List [Any]。这也意味着你可以将任何东西添加到列表中,因为它是List [Any]。

翻译自:https://stackoverflow.com/questions/14584830/covariant-type-t-occurs-in-contravariant-position

转载注明原文:scala – 协变型T发生在相反的位置