为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Scala的不可变Set在其类型中不协变?

为什么Scala的不可变Set在其类型中不协变?

FFIVE 2019-08-27 16:05:23
为什么Scala的不可变Set在其类型中不协变?根据原始答案重写这个问题该scala.collection.immutable.Set班是不是在它的类型参数不变性。为什么是这样?import scala.collection.immutable._def foo(s: Set[CharSequence]): Unit = {     println(s)}def bar(): Unit = {    val s: Set[String] = Set("Hello", "World");    foo(s); //DOES NOT COMPILE, regardless of whether type is declared             //explicitly in the val s declaration}
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

对于任何想知道为什么这个答案似乎有点偏离主题的人,这是因为我(提问者)已经修改了这个问题。

Scala的类型推断足以让你知道在某些情况下你需要CharSequences而不是字符串。特别是,以下内容适用于2.7.3:

import scala.collections.immutable._def findCharSequences(): Set[CharSequence] = Set("Hello", "World")

至于如何直接创建immutable.HashSet:不要。作为一个实现优化,少于5个元素的immutable.HashSets实际上不是immutable.HashSet的实例。它们是EmptySet,Set1,Set2,Set3或Set4。这些类是immutable.Set的子类,但不是immutable.HashSet。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 575 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信