为了方便、清晰和抽象,我想为参数化集合特征的特定绑定(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/