gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:17:09 24 4
gpt4 key购买 nike

在 Scaladoc 中, BitSet 定义为扩展 Set[Int] .所以我想使用 BitSetSet[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]的父类(super class)型?

最佳答案

原来你的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)。

关于scala - 为什么 BitSet 需要将显式转换视为 Set[Int] 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9692152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com