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

为什么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}


FFIVE
浏览 594回答 3
3回答

凤凰求蛊

对于任何想知道为什么这个答案似乎有点偏离主题的人,这是因为我(提问者)已经修改了这个问题。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。
打开App,查看更多内容
随时随地看视频慕课网APP