在Scala中,我想创建一个名为Map
的通用新MyClass
类。在这个类中,我想保持类型的通用性,并仅修改Sequence类型的方法++。
++方法必须为此映射中的相同键合并相等的对象。
实施例
val map1 = ("a"->Seq(1,2))
val map2 = ("a"->Seq(2,3))
结果必须是
map1++map2 = ("a"->Seq(1,2,3))
而不是
map1++map2 = ("a"->Seq(2,3))
对于所有其他类型MyMap
必须与“经典”Map类相同。
答案 0 :(得分:1)
正如其他人在评论中指出的那样,你应该先尝试一下,然后再遇到一些具体的问题。这是你如何开始,因为你想要实现Map trait:
class MyClass[A, +B] extends Map[A, B] {
def get(key: A): Option[B] = ???
def iterator: Iterator[(A, B)] = ???
def +[B1 >: B](kv: scala.Tuple2[A, B1]): Map[A, B1] = ???
def -(key: A): Map[A, B] = ???
override def ++[B1 >: B](xs: scala.collection.GenTraversableOnce[scala.Tuple2[A, B1]]) = ???
}
您也可以从现有的Map实现开始,例如
class MyClass[A, +B] extends scala.collection.immutable.HashMap[A, B] {
override def ++[B1 >: B](xs: scala.collection.GenTraversableOnce[scala.Tuple2[A, B1]]) = ???
}
但是,在这种情况下,编译器会警告您,由于实现细节,从现有实现继承是不明智的。