Scala:方便绑定(bind)集合类型参数

标签 scala scala-collections

为了方便、清晰和抽象,我想为参数化集合特征的特定绑定(bind)指定另一个名称。例如,首先考虑:

import collection.mutable.Map // NB: Map is a trait
val m1 = Map[String, Int]()   // uses the Map companion object to create a HashMap

现在我想用 MyMap 替换 Map[String, Int]。理想情况下,我只想做类似的事情:

trait MyMap extends Map[String, Int]
object MyMap extends Map[String, Int]   // not good enough by itself, need some apply defs
val m2 = MyMap()                        // nope

我可以向 MyMap 伴随对象添加更多内容,或者我可以让 MyMap 扩展 HashMap[String, Int] 并忘记依赖于 map 伴随对象。

但是对于应该简单的事情来说,这些替代方案似乎需要太多工作:我只想 MyMap 无论出现在哪里,都可以像 Map[String, Int] 一样工作。最简单的方法是什么,还是我错过了一些更深层次的原则?

最佳答案

使用类型别名:

type MyMap = Map[String, Int]

请注意,这不会为您提供 object MyMap,如果您定义了它,它不是伴随对象(object Map 是)并且编译器不会检查它的隐式转换。

关于Scala:方便绑定(bind)集合类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7434125/

相关文章:

java - 如何在 Spark 中使用 Java 8 Date 类和 Jackson?

Scala/Akka 套接字服务器 IterateeRef 语法

java - 类型不匹配将 Scala JUnit 测试中的数组传递给 Java 方法

scala - Scala 中几个 Seq 的惰性笛卡尔积

scala 2.8集合不一致?

scala - scala 的 ClassTag 和 TypeTag 的区别

Scala Rank-1 多态性

java - 在 Android 上的 Scala 代码中改造 HTTP 报告 "HTTP method annotation is required"

scala - map <字符串,列表<?在 Scala 中扩展 T>>

scala - 将 java.util.LinkedHashMap 转换为 scala.collection.mutable.Map