无法为嵌套对象层次结构中的类型获取简单名称

时间:2015-08-25 15:08:13

标签: java scala

我有以下代码:

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。

1 个答案:

答案 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