为了方便,清晰和抽象,我想为参数化集合特征的特定绑定组成另一个名称。例如,首先考虑:
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]
而忘记依赖地图伴随对象中的魔法默认值。
但是这些替代方案对于一些应该简单的事情来说似乎太过分了:我只希望MyMap
在Map[String, Int]
出现的地方就像{{1}}一样。什么是最简单的方法,或者我错过了一些更深层次的原则?
答案 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()