加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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]。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读