EDIT: переписан этот вопрос на основе оригинального ответаПочему неизменный набор Scala не ковариант в своем типе?
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
}
Стоит отметить, что 'Foo (s.toSet [CharSequence])' отлично компилируется. Метод toSet - это O (1) - он просто обертывает 'asInstanceOf'. –
Обратите внимание, что 'foo (Set (« Hello »,« World »))' компилируется тоже на 2.10, так как Scala, похоже, может вывести правильный тип Set. Он не работает с неявными преобразованиями (http://stackoverflow.com/questions/23274033/implicit-definition-working-for-seq-but-not-for-set/). –