gpt4 book ai didi

scala - 协变类型T发生在相反位置

转载 作者:行者123 更新时间:2023-12-03 13:28:26 27 4
gpt4 key购买 nike

我知道之前曾有人问过这个问题,但答案不适用于这种情况,或者我听不懂。

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

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],并且所包含的 listList[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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com