0
Class[T]
을 List[T]
에 연결하는 관용적 인 방법은 무엇입니까? 본질적으로 구아바의 ClassToInstanceMap
과 동등하지만 Multimap 형식을 원합니다.클래스를 인스턴스 스칼라에 다중 맵
스칼라의 mutable.Multimap
이 어떻게 여기에 들어갈 지 잘 모르겠습니다.
Class[T]
을 List[T]
에 연결하는 관용적 인 방법은 무엇입니까? 본질적으로 구아바의 ClassToInstanceMap
과 동등하지만 Multimap 형식을 원합니다.클래스를 인스턴스 스칼라에 다중 맵
스칼라의 mutable.Multimap
이 어떻게 여기에 들어갈 지 잘 모르겠습니다.
는 표준 라이브러리의 어디에도 없지만 (이 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)
사용 TypeTag
이 ClassTag
의 대신이야 당신이 원하는 경우 동일한 클래스와 다른 제네릭 형식 인수 (예 : Option[Int]
및 Option[String]
)가있는 인스턴스를 별도로 저장합니다.