Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匿名对象上的scala反射_Scala_Reflection_Anonymous Class - Fatal编程技术网

匿名对象上的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)