【发布时间】:2011-11-18 01:07:25
【问题描述】:
为了方便、清晰和抽象,我想为参数化集合特征的特定绑定起一个名字。例如,首先考虑:
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] 一样行事。最简单的方法是什么,还是我错过了一些更深层次的原则?
【问题讨论】: