匿名对象上的scala反射
给定匿名对象:匿名对象上的scala反射,scala,reflection,anonymous-class,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 = curren
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..a
运行时类型似乎不是scala反射所识别的类型。通过将[anon.type]的
类型替换为instanceMirror.symbol.toType
,问题得到了解决,但仍然不知道为什么……您尝试过不反射吗?看起来太复杂了。@cchantep,没有思考是微不足道的。在我的例子中,我必须使用反射。根据你的问题,很不清楚为什么,除了动态加载的类(类加载器之类的东西),反射似乎不存在required@cchantep谢谢你的回复。问题不在于是否使用反射。给出了要求。基于这种情况,我不得不使用scala反射来解决这个问题。
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)