【发布时间】:2012-10-15 18:33:09
【问题描述】:
看起来这让我很接近,但是 (a) 不完全是(见下文),并且 (b) 使用名称的字符串表示感觉就像是 hack...
scala> import scala.reflect.runtime.universe._import scala.reflect.runtime.universe._
scala> val t = typeOf[Int]
t: reflect.runtime.universe.Type = Int
scala> t.typeSymbol.asClass.fullName
res0: String = scala.Int
scala> object X { class Y }
defined module X
scala> val y = typeOf[X.Y]
y: reflect.runtime.universe.Type = X.Y
scala> Class.forName(y.typeSymbol.asClass.fullName)
java.lang.ClassNotFoundException: X.Y [...]
我是否缺少一些更直接的方法来访问这些信息?还是最好,如果我在某个时候还需要类信息,只是为了保留一组并行的 Java 类信息? (呃!)
【问题讨论】:
-
如果你能得到一个 AnyRef 类型的实例,你就不能恢复到 java.lang.Object-y 的优点,然后调用 myObj.getClass().getName() 吗?
-
例如,对象 X { class Y } 定义模块 X scala> (new X.Y).getClass.getName res7: java.lang.String = X$Y
-
作为一个快速建议,尝试运行
scala -Xprint:typer以查看 REPL 是否以及如何实际将 X 包装到它自己的对象中。 -
我一直在尝试让
Class.forName(package.and.object)在 REPL 中工作,但未能成功。
标签: scala reflection scala-2.10