2012-03-13 35 views
6

在scaladoc中,BitSet定義爲延伸Set[Int]。所以我想用BitSet如在Set[Int]實例會的工作,但我得到一個類型不匹配:爲什麼BitSet要求將顯式強制轉換視爲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() 
          ^

然而鑄造的工作原理:

scala> val b: Set[Int] = BitSet().asInstanceOf[Set[Int]] 
b: Set[Int] = BitSet() 

那麼,爲什麼我需要明確地投下BitSetSet[Int]Set[Int]Set[Int]的超級類型?

回答

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() 

沒有任何

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() 

,它原來是爲Set默認的導入給你x2。進口collection.immutable.BitSet或進口collection.Set(覆蓋collection.immutable.Set)。

+0

@jullybobble - 你還是很困惑。 'collection.Set'和'scala.collection.Set'是_完全一樣的東西_。你的意思是來自'Predef'的'Set'。 – 2012-03-13 21:36:18

+0

哎呀,對!現在我懂了!感謝您的更正! – 2012-03-13 22:51:32

+0

注:我刪除了我對@Rex回答的第一條評論,因爲這是錯誤的和誤導性的。 – 2012-03-14 07:29:22

相關問題