为什么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。
添加回答
举报
0/150
提交
取消