Разница между 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? Я хотел бы знать объяснение как можно более подробно. Спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос