【发布时间】:2015-04-18 14:03:13
【问题描述】:
简介:
...
TypeTag[T]封装了一些编译时类型T的运行时类型表示。 ...
...TypeTags 始终由编译器生成。 ...[1]
TypeTags 位于scala.reflect.** 包中。
另一个 SO answer 提到使用 java 反射会在您的应用程序中产生运行时性能开销。
问题:TypeTags、ClassTags 和 WeakTypeTags 在运行时使用 java 反射的程度如何?它们是在编译时生成的,但在使用时是否会导致运行时性能开销?
示例:
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 反射?
【问题讨论】:
标签: scala reflection scala-reflect