muc*_*aho 7 reflection scala scala-reflect
简介:
...
TypeTag[T]封装某些编译时类型的运行时类型表示T....
...TypeTags的总是由编译器生成....... [1]
TypeTags位于scala.reflect.**包装中.另一个SO回答提到使用java反射会在应用程序中产生运行时性能开销.
问题:s,s和s在运行时使用java反射的
程度如何?它们是在编译时生成的,但它们在使用时是否会导致运行时性能开销?TypeTagClassTagWeakTypeTag
示例:
def isOfType[A : ClassTag : TypeTag, E : ClassTag : TypeTag](actual: A, expected: E): Boolean = {
actual match {
case _ : E if typeOf[A] =:= typeOf[E] => true
case _ => false
}
}
assert( isOfType(List.empty[Int], List.empty[Int]))
assert(!isOfType(List.empty[String], List.empty[Int]))
Run Code Online (Sandbox Code Playgroud)
虽然标签是在编译时生成的,但我可以在运行时感受到延迟.类型比较是否使用了引擎盖下不那么高效的java反射?
嗯,你可以看这里。在您的情况下,不涉及 Java 反射,但=:=最终委托给isSameType2,这非常重要。它首先检查引用相等性。