Для удобства, ясности и абстракции я хочу придумать другое имя для конкретной привязки параметризованного трейта коллекции. Например, сначала рассмотрим:
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]
, где бы оно ни появлялось. Как это сделать проще всего, или я упускаю какой-то более глубокий принцип?