scala – 协变型T发生在相反的位置
发布时间:2020-12-16 09:37:12 所属栏目:安全 来源:网络整理
导读:我知道这个问题已经被问过了,但是这个答案不适用于这种情况,或者我不明白。 基本上,为什么以下(重现我的问题的简单例子)不起作用? class Test[+T] { var list: List[T] = _} 我遇到的问题是我有一个对象,我想通过一个Test [Nothing](空的Test)的例子,
我知道这个问题已经被问过了,但是这个答案不适用于这种情况,或者我不明白。
基本上,为什么以下(重现我的问题的简单例子)不起作用? 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]。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |