加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读