便宜上、明快さと抽象化のために、パラメータ化されたコレクション特性の特定のバインディングの別の名前を作りたいと思います。たとえば、最初の考慮:Scala:コレクション型パラメータの便利なバインディング
import collection.mutable.Map // NB: Map is a trait
val m1 = Map[String, Int]() // uses the Map companion object to create a HashMap
は今、私はMap[String, Int]
ためMyMap
を代用します。理想的には私は同じように何かをしたいと思います:
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
コンパニオンオブジェクトに多くのものを追加することができ、または私はHashMap[String, Int]
を拡張し、地図のコンパニオンオブジェクト内の不履行魔法に頼ることを忘れるMYMAP作ることができます。
しかし、これらの選択肢はシンプルであるべき何かのためにあまりにも多くの仕事のように思える:私はちょうどそれがどこに現れてもMyMap
がMap[String, Int]
のように行動したいと思います。それを行う最も簡単な方法は何ですか、それとももっと深い原則が欠けていますか?
あなたは、ファクトリメソッドへの容易なアクセスを得ることができます(つまり)(適用。)再び、それは、単にコンパニオンオブジェクトではありません 'valのマイマップ= Map.apply [文字列、INT] _'けど、と単一の機能。 –
'val MyMap = Map'はあなたにコンパニオンを与えます。 –
'val MyMap = Map'は' Map [String、Int] 'のコンパニオンを私に与えてくれません。 –