【问题标题】:Scala's HashSet doesn't seem to implement Set?Scala 的 HashSet 似乎没有实现 Set?
【发布时间】:2017-02-28 10:18:31
【问题描述】:

我有一个 Scala 课程:

class Example {
    def fooBar() : String = {
        // do some stuff

        var whistles = new HashSet[String]()
        fizzBuzz(whistles)

        // do some more stuff
    }

    def fizzBuzz(whistles : Set[String]) : Unit = {
        // do some stuff down here
    }
}

当我调用fizzBuzz 方法(从fooBar 内部)时,这给了我编译器错误,说明:

类型不匹配;发现:java.util.HashSet[String] 需要:Set[String]

我在这里缺少什么?!? HashSet 实现 Set,我最后一次检查...

【问题讨论】:

    标签: scala hashset


    【解决方案1】:

    您正在将java.util.HashSet[A]HashSet 的 Java 版本)与scala.collection.immutable.Set[A] 混合使用。你想要scala.collection.immutable.HashSet[A]

    val whistles = scala.collection.immutable.HashSet[String]()
    fizzBuzz(whistles)
    

    【讨论】:

      【解决方案2】:

      Scala 有简洁的集合实现。它有两种风格的集合。

      1. 可变集合(读写)

        scala.collection.mutable.*

      2. 不可变集合(只读)

        scala.collection.immutable.*

      您不应该混淆两种变体。

      可变

          val mutableHashset = scala.collection.mutable.HashSet[String]()
          mutableHashset += "name"
          mutableHashset.foreach { println }
      

      不可变

        val immutableHashSet = scala.collection.immutable.HashSet[String]("Name", "Age", "Address")
          immutableHashSet.foreach { println }
      

      【讨论】:

      • 这与不可变集合与可变集合有什么关系?他的错误消息表明他正在使用java.utl.HashSet
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2019-01-12
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多