Например, я знаю, что во время выполнения у меня будут только следующие ключи: string-key-1
, number-key-1
.
Я могу создать карту ключа к введенному значению так:
sealed trait Container {
type T
def resolve: T = this match {
case StringContainer(s) => s.asInstanceOf[String]
case BigDecimalContainer(n) => n.asInstanceOf[BigDecimal]
// and more
}
}
final case class StringContainter(v: String) { type T = String }
final case class BigDecimalContainer(v: BigDecimal) { type T = BigDecimal }
Тогда я мог бы применять такие типы:
Map[String, Container]
Но для этого все же требуется, чтобы клиент знал, что тип string-key-1
не может отображаться на BigDecimalContainer
. Есть ли способ создать логику, которая внутренне отображает кортежи (key, container type) => value
? Некая неявная функция предиката, вероятно, то, что мне нужно, нет?