匿名对象上的scala反射

时间:2016-01-11 00:19:22

标签: scala reflection anonymous-class

给出一个匿名对象:

val anon = new {
  val a = BigDecimal(1)
}

如何使用scala反射获取a的值?

我尝试过使用java反射,这很简单。但是使用scala反射,这并不明显。

以下是我的尝试:

package test
object ReflectTest extends App {
    val anon = new {
      val a = BigDecimal(1)
    }

    val instanceMirror = currentMirror.reflect(anon)
    val anonType = typeOf[anon.type]
    val anonTermSymbol = anonType.member(newTermName("a")).asTerm
    val anonFieldMirror = instanceMirror.reflectField(anonTermSymbol)
    val result = anonFieldMirror.get
    println(result)
}

但遇到异常:

  

线程“main”中的异常scala.ScalaReflectionException:期望匿名类$ anon $ 1的成员,您提供了值test.ReflectTest。< refinement> .a

at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$ErrorNotMember(JavaMirrors.scala:130)
at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$checkMemberOf$1.apply(JavaMirrors.scala:225)
at scala.reflect.runtime.JavaMirrors$JavaMirror.ensuringNotFree(JavaMirrors.scala:214)
at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$checkMemberOf(JavaMirrors.scala:224)
at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.reflectField(JavaMirrors.scala:247)
at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.reflectField(JavaMirrors.scala:243)

似乎运行时类型不是scala反射识别的那种。

0 个答案:

没有答案