为什么BitSet需要将显式强制转换视为Set [Int]的实例?

Jul*_*gaz 6 scala scala-collections

在scaladoc中,BitSet被定义为扩展Set[Int].所以我认为BitSet在实例中使用as Set[Int]会工作,但我得到一个类型不匹配:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).

scala> import collection.BitSet
import collection.BitSet

scala> val b: Set[Int] = BitSet()
<console>:8: error: type mismatch;
 found   : scala.collection.BitSet
 required: Set[Int]
       val b: Set[Int] = BitSet()
                               ^
Run Code Online (Sandbox Code Playgroud)

然而演员工作:

scala> val b: Set[Int] = BitSet().asInstanceOf[Set[Int]]
b: Set[Int] = BitSet()
Run Code Online (Sandbox Code Playgroud)

那么为什么我需要明确地演绎BitSet一段Set[Int]时间Set[Int]才是超级型Set[Int]

Rex*_*err 9

事实证明你Set的确是scala.collection.immutable.Set.所以你可以

val b0: Set[Int] = collection.immutable.BitSet()
val b1: collection.Set[Int] = collection.BitSet()
val b2: collection.immutable.Set[Int] = collection.immutable.BitSet()
val b3: collection.mutable.Set[Int] = collection.mutable.BitSet()
val b4: collection.Set[Int] = collection.immutable.BitSet()
val b5: collection.Set[Int] = collection.mutable.BitSet()
Run Code Online (Sandbox Code Playgroud)

但不是任何一个

val x1: collection.immutable.Set[Int] = collection.BitSet()
val x2: collection.immutable.Set[Int] = collection.mutable.BitSet()
val x3: collection.mutable.Set[Int] = collection.BitSet()
val x4: collection.mutable.Set[Int] = collection.immutable.BitSet()
Run Code Online (Sandbox Code Playgroud)

事实证明,默认导入为Set您提供x2.导入collection.immutable.BitSet或导入collection.Set(覆盖collection.immutable.Set).