У меня есть класс типов и несколько экземпляров:
trait TC[T] { def doThings(x: T): Unit }
implicit val tcA = new TC[A] { /* ... */}
implicit val tcB = new TC[B] { /* ... */}
implicit val tcC = new TC[C] { /* ... */}
/* ... */
На моем сайте вызовов у меня есть входные данные как Any, и мне нужно проверить, существует ли неявное для фактического типа ввода:
def process(in: Any) = in match {
case x: A => implicitly[TC[A]].doThings(x)
case x: B => implicitly[TC[B]].doThings(x)
case x: C => implicitly[TC[C]].doThings(x)
//...
}
Это кажется утомительным и ненужным, так как я должен перечислить все классы, которые имеют этот экземпляр класса типа. Могу ли я достичь этого с помощью чего-то вроде:
def process(in: Any) = in match {
case x: T : TC => implicitly[TC[T]].doThings(x) //This does not work
}
Редактировать: ввод - Any (Объект из библиотеки Java). Невозможно использовать общий или контекстный ограниченный ввод.