斯卡拉
介绍 :
  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 ,这是非常平凡的。  它首先检查参考平等。 
上一篇: Scala
下一篇: Pass a Swift class as parameter, and then call a class method out of it
