简介:
...
TypeTag[T]
封装了一些编译时类型的运行时类型表示T
。...
...TypeTag
s 总是由编译器生成。... [1]
TypeTag
s 位于scala.reflect.**
包中。另一个SO 答案提到使用 java 反射会在您的应用程序中产生运行时性能开销。
问题:s、s 和s 在运行时在
多大程度上使用 java 反射?它们是在编译时生成的,但在使用时会导致运行时性能开销吗?TypeTag
ClassTag
WeakTypeTag
示例:
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]))
虽然标签是在编译时生成的,但运行时我能感觉到延迟。类型比较是否在底层使用了性能不佳的 java 反射?