我要做的是编写一个扩展Map[DateTime, T]
的自定义类。扩展类是将Map[DateTime, T]
作为构造函数参数,并为Map
要实现的每个方法调用所提供映射的相应方法。
我写的没什么问题
def -(key: DateTime) = iv.-(key)
def get(key: DateTime) = iv.get(key)
但我一直坚持
+[B1 :>B](kv: (A, B1)):Map[A, B1]
我打算怎么写呢?
是否有一个简单的引用Map
包装器实现开始?
PS:不要声明它为type DtMap[T] = Map[DateTime, T]
- 我将不得不在课堂上添加自己的方法。
更新:所以,结果看起来像这样,巩固它,以便有人能够将它作为他的Map
扩展的起点(可能解决方案有一些隐藏的问题 - 请让我知道):
case class DtValMap[T](iv: Map[DateTime, T]) extends Map[DateTime, T] {
def -(key: DateTime) = new DtValMap(iv.-(key))
def get(key: DateTime) = iv.get(key)
def +[T1 >: T](kv: (DateTime, T1)): DtValMap[T1] = new DtValMap(iv + kv)
def iterator: Iterator[(DateTime, T)] = iv.iterator
}
UPDATE2:我注意到现在导致问题的拼写错误:我:>
(错误)而不是>:
。但我故意不在上面的文字中纠正它,因为它会使问题毫无意义。
答案 0 :(得分:1)
您考虑过MapProxy
了吗? 这已在Scala 2.11上弃用,因此应避免使用此特定解决方案。
无论如何,如果您坚持延长Map
并提供其所有API,那么实施+
的问题到底是什么?为什么这不起作用?
def +[B1 >: T](kv: (DateTime, B1)):Map[DateTime, B1] = new YourMap(iv + kv)
答案 1 :(得分:0)
如果我理解正确,有
class YourMap[T](iv: Map[DateTime, T]) extends Map[DateTime, T]
你不能这样做吗
def +[T1 >: T](kv: (DateTime, T1)): YourMap[T1] = new YourMap(iv + kv)
我对你的def -
不太确定,如果我理解正确的话,它会返回一张地图,而不是你的地图。如果这样可以,为什么你不能对+
做同样的事情?
在type DtMap[T]
的行中,您是否考虑过使用pimp我的库添加方法,而不是使用类扩展?集合类很复杂,因此扩展它们。