2016-02-08 6 views
-1

В Scala я хочу создать общий новый класс Map под названием MyClass. В этом классе я хочу поддерживать общность типов и модифицировать только метод ++ для типа последовательности. Метод ++ должен объединить равный объект для одного и того же ключа на этой карте.Как создать новый класс Scala Map?

Пример

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.

+1

Идите дальше. Что тебя останавливает? (ака, что вы пробовали и где вы застряли?) –

+1

Просто расширьте «Карта» переопределить метод «++». –

+0

У меня проблема с параметром типа: всегда показывайте мне «Тип класса карты принимает параметр типа», хотя я вставляю общий тип (a: T, b: R). –

ответ

1

Как уже указывалось в комментариях, вы должны сначала попробовать что-то, а затем вернуться, если у вас возникнут некоторые проблемы. Вот как вы можете начать, учитывая то, что вы хотите реализовать Карта особенность:

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]]) = ??? 

} 

Вы также можете начать с существующей реализации карт, таких как

class MyClass[A, +B] extends scala.collection.immutable.HashMap[A, B] { 

    override def ++[B1 >: B](xs: scala.collection.GenTraversableOnce[scala.Tuple2[A, B1]]) = ??? 

} 

Однако, в этом случае компилятор выдаст предупреждение вы, что наследование от существующей реализации неразумно из-за деталей реализации.