【发布时间】:2018-02-02 08:51:45
【问题描述】:
我正在使用以下代码来实例化一个 scala 对象。这可行,但似乎有一个问题:println 被打印出两次,每次都使用另一个哈希码。
import scala.reflect.runtime.universe._
import scala.reflect.runtime.{universe => ru}
object Test2 { println("init"+hashCode())}
val mirror = ru.runtimeMirror(getClass.getClassLoader)
val m = ru.typeOf[Test2.type].members.filter(_.isConstructor).head.asMethod
val m2 = mirror.reflectClass(typeOf[Test2.type].typeSymbol.asClass)
val cm = m2.reflectConstructor(m)
val e = cm.apply()
结果:
init472467991
init2051378291
e: Any = Test2$@7a458c73
e 的 hashCode 等于后一个 (2051378291)。我想知道为什么这是因为据我所知应该只有一个?
编辑:使用 scala 版本 2.12.4
【问题讨论】:
-
请提供有关 Scala 版本的信息
-
我同意@greenshade。对于 2.11 版,我得到:
scala.ScalaReflectionException: object Test2 is an inner class, use reflectClass on an InstanceMirror to obtain its ClassMirror -
scala 版本 2.12.4
标签: scala object reflection instantiation