Существует некоторая поддержка, в основном в отношении типов элементов массива:
scala> import reflect.ClassTag
import reflect.ClassTag
scala> val c: Class[_] = classOf[Int]
c: Class[_] = int
scala> (ClassTag(c): Any) match { case ClassTag.Boolean => "bool" case ClassTag.Int => "int" }
res0: String = int
, но вариант использования заключается в упрощении проверки типов
scala> def f[A: ClassTag] = ("abc": Any) match { case _: A => "A" case _ => "other" }
f: [A](implicit evidence$1: scala.reflect.ClassTag[A])String
scala> f[Int]
res1: String = other
scala> f[String]
res2: String = A
Возможно один аргумент для classTag
не похоже на стабильный идентификатор, так как classOf[C]
, вычисленные в разных загрузчиках классов, не сравниваются равными.