Разница между Scala's ClassTag и TypeTag
Согласно scala doc, TypeTag содержит больше информации, чем ClassTag. Мне кажется, что TypeTag может делать больше вещей, чем ClassTag, например, выводить информацию о параметре типа времени компиляции во время выполнения и т. Д.
Однако в следующем примере показано, что ClassTag может выполнять эту работу, а TypeTag - нет. Я хочу понять почему.
import scala.reflect.ClassTag
import scala.reflect.runtime.universe.TypeTag
// def func[T](o: Any): Unit = {
// def func[T : TypeTag](o: Any): Unit = {
def func[T : ClassTag](o: Any): Unit = {
o match {
case x: T => println(Some(x))
case _ => println(None)
}spark
}
func[Map[Int, Int]](List(1, 2, 3))
Только ClassTag приведет образец кNone
(что является ожидаемым поведением), первые две прокомментированные строки будутSome
ветка.
Кажется, что ClassType может отражать тип объекта во время выполнения, а Type Tag - нет. Но не является ли TypeTag надмножеством ClassTag? Я хотел бы знать объяснение как можно более подробно. Спасибо.