2014-05-12 3 views

답변

3

는 표준 라이브러리의 어디에도 없지만 (이 API를 조금 단순화하기 위해 ClassTag의 대신 Class를 사용)를 구현하는 것은 매우 사소한 :

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) 

사용 TypeTagClassTag의 대신이야 당신이 원하는 경우 동일한 클래스와 다른 제네릭 형식 인수 (예 : Option[Int]Option[String])가있는 인스턴스를 별도로 저장합니다.