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

时间:2011-09-15 16:19:04

标签: scala scala-collections

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

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]而忘记依赖地图伴随对象中的魔法默认值。

但是这些替代方案对于一些应该简单的事情来说似乎太过分了:我只希望MyMapMap[String, Int]出现的地方就像{{1}}一样。什么是最简单的方法,或者我错过了一些更深层次的原则?

2 个答案:

答案 0 :(得分:4)

使用类型别名:

type MyMap = Map[String, Int]

请注意,这不会给你object MyMap,如果你定义它,是伴侣对象(object Map是),编译器将不会检查它用于隐式转换。

答案 1 :(得分:0)

@Alexey Romanov 类型别名不会为您提供工厂方法。另一方面,导入将是。

scala> import collection.mutable.{Map => MyMap}
scala> val m1 = MyMap()
m1: scala.collection.mutable.Map[Nothing, Nothing] = Map()