[英]Scala - Run-time performance of TypeTags, ClassTags and WeakTypeTags
简介 :
...
TypeTag[T]
封装了某些编译时类型T
的运行时类型表示。 ...
...TypeTag
总是由编译器生成。 ...... [1]
TypeTag
位于scala.reflect.**
包中。 另一个SO回答提到使用java反射会在应用程序中产生运行时性能开销。
问题 :
TypeTag
, ClassTag
和WeakTypeTag
在运行时使用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反射?
好吧,你可以看看这里 。 在你的情况下,不涉及Java反射,但是=:=
最终委托给isSameType2
,这非常重要。 它首先检查参考平等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.