我有以下代码:
object Repro {
def main(args: Array[String]): Unit = {
println(classOf[Foo.Bar].getSimpleName)
}
object Foo {
trait Bar
}
}
当我跑步时,我得到:
Exception in thread "main" java.lang.InternalError: Malformed class name
at java.lang.Class.getSimpleName(Class.java:1322)
at Tests$.main(Tests.scala:3)
at Tests.main(Tests.scala)
这是预期的行为吗?如果是这样,为什么?我在这里缺少什么?
我正在使用JDK 1.8.0_25和Scala 2.11.7。
答案 0 :(得分:3)
你正在使用一个非常古老的Scala bug:SI-2034。
您可以使用Scala反射而不是普通的Java反射,并实现相同的目标:
import scala.reflect.runtime.universe._
scala> val t = typeOf[A.B.type]
t: reflect.runtime.universe.Type = A.B.type
scala> t.termSymbol.name
res11: reflect.runtime.universe.Symbol#NameType = B