将Class[T]
关联到List[T]
s的惯用方法是什么?基本上,我想要相当于Guava的ClassToInstanceMap
,但是在Multimap形式中。
我不确定Scala mutable.Multimap
如何适应这里。
答案 0 :(得分:3)
标准库中没有任何内容,但实现起来非常简单(使用ClassTag
而不是Class
来简化API):
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)
如果要分别存储具有相同类和不同泛型类型参数(例如TypeTag
和ClassTag
)的实例,请使用Option[Int]
而不是Option[String]
。< / p>