scala – 为什么BitSet需要将显式转换视为Set [Int]的实例?
发布时间:2020-12-16 18:53:13 所属栏目:安全 来源:网络整理
导读:在 scaladoc中, BitSet 被定义为扩展Set [Int].所以我认为在Set [Int]的实例中使用BitSet会起作用,但是我得到一个类型不匹配: Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM,Java 1.6.0_29).scala import collection.BitSetimp
在
scaladoc中,
BitSet 被定义为扩展Set [Int].所以我认为在Set [Int]的实例中使用BitSet会起作用,但是我得到一个类型不匹配:
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() 那么为什么我需要明确地将BitSet转换为Set [Int]而Set [Int]是Set [Int]的超类型? 解决方法
事实证明你的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). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |