根据“ Scala类型系统 ”,
val c = new Cval clazz = c.getClass // method from java.lang.Objectval clazz2 = classOf[C] // Scala method: classOf[C] ~ C.classval methods = clazz.getMethods // method from java.lang.Class<T>
该
classOf[T]方法返回Scala类型的运行时表示形式。它类似于Java表达式
T.class。
使用
classOf[T]非常方便,当你有一个类型,你想了解的信息,同时
getClass便于检索从类型的实例相同的信息。
然而,
classOf[T]并
getClass返回略微不同的值,反映了类型擦除在JVM上的效果,在的
getClass的情况下。
scala> classOf[C]res0: java.lang.Class[C] = class Cscala> c.getClassres1: java.lang.Class[_] = class C
这就是为什么以下情况不起作用的原因:
val xClass: Class[X] = new X().getClass //it returns Class[_], nor Class[X]val integerClass: Class[Integer] = new Integer(5).getClass //similar error
有一张关于的回程类型的票证getClass。
(James Moore报告说该票证是“现在”的,即两年后的2011年11月,已修复。
在2.9.1中,getClass现在执行:
scala> "foo".getClass res0: java.lang.Class[_ <: java.lang.String] = class java.lang.String
)



