scala中的类到实例多重映射

scala中的类到实例多重映射,scala,collections,multimap,Scala,Collections,Multimap,将Class[T]s与List[T]s关联的惯用方法是什么?本质上,我想要的是番石榴的等价物,但要以多重映射的形式 我不确定Scala如何适应这里。标准库中没有任何内容,但实现起来非常简单(使用ClassTags而不是Class来简化API): 如果要分别存储具有相同类和不同泛型类型参数(例如Option[Int]和Option[String])的实例,请使用TypeTags而不是ClassTags。标准库中没有任何内容,但实现起来非常简单(使用ClassTags而不是Class稍微简化API)

Class[T]
s与
List[T]
s关联的惯用方法是什么?本质上,我想要的是番石榴的等价物,但要以多重映射的形式


我不确定Scala如何适应这里。

标准库中没有任何内容,但实现起来非常简单(使用
ClassTag
s而不是
Class
来简化API):


如果要分别存储具有相同类和不同泛型类型参数(例如
Option[Int]
Option[String]
)的实例,请使用
TypeTag
s而不是
ClassTag
s。

标准库中没有任何内容,但实现起来非常简单(使用
ClassTag
s而不是
Class
稍微简化API):


如果要分别存储具有相同类和不同泛型类型参数(例如
Option[Int]
Option[String]
)的实例,请使用
TypeTag
s而不是
ClassTag
s。

标准库中没有任何内容,但实现起来非常简单(使用
ClassTag
s而不是
Class
稍微简化API):


如果要分别存储具有相同类和不同泛型类型参数(例如
Option[Int]
Option[String]
)的实例,请使用
TypeTag
s而不是
ClassTag
s。

标准库中没有任何内容,但实现起来非常简单(使用
ClassTag
s而不是
Class
稍微简化API):

如果要分别存储具有相同类和不同泛型类型参数(例如
Option[Int]
Option[String]
)的实例,请使用
TypeTag
s而不是
ClassTag
s

class ClassToInstanceMultiMap private (private val delegate: Map[ClassTag[_], List[_]]) {
  def addInstance[T](x: T)(implicit ct: ClassTag[T]) = 
    new ClassToInstanceMultiMap(delegate + (ct -> x))

  def getInstances[T](implicit ct: ClassTag[T]) = delegate.getOrElse(ct, List.empty).asInstanceOf[List[T]]

  // whatever other methods you want
}

object ClassToInstanceMultiMap {
  val empty = new ClassToInstanceMultiMap()
}

// usage
val cimm = ClassToInstanceMultiMap.empty.addInstance(1).addInstance(2).addInstance("a").getInstances[Int]
// returns List(1, 2)