【发布时间】:2016-10-23 11:41:57
【问题描述】:
根据 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 分支。
似乎ClassTag 可以在运行时反映对象的类型,而TypeTag 不能。但是TypeTag不是ClassTag的超集吗?我想知道尽可能详细的解释。谢谢。
【问题讨论】:
-
我认为this question 是您正在寻找的。span>
标签: scala reflection