gpt4 book ai didi

scala运行时反射(reflect)有时会抛出异常

转载 作者:行者123 更新时间:2023-12-04 04:33:41 25 4
gpt4 key购买 nike

object Reflects {

def mirror() = universe.runtimeMirror(getClass.getClassLoader)

def caseFields(x: AnyRef) = {
val instanceMirror = mirror().reflect(x)
instanceMirror.symbol.typeSignature.members.collect {
case m: MethodSymbol if (m.isCaseAccessor) => m.name.toString -> instanceMirror.reflectMethod(m).apply()
}
}

}

我定义了一个对象 Reflects , 当我调用 caseFields其他类中的方法

Sometimes this method throws following exception


java.lang.UnsupportedOperationException: tail of empty list
at scala.collection.immutable.Nil$.tail(List.scala:339) ~[scala-library.jar:na]
at scala.collection.immutable.Nil$.tail(List.scala:334) ~[scala-library.jar:na]
at scala.reflect.internal.SymbolTable.popPhase(SymbolTable.scala:172) ~[scala-reflect.jar:na]

和其他奇怪的异常(exception)。

这种方法有什么问题

最佳答案

在 2.10.3 中(可能在 2.10.4 中,因为看起来我们没有时间从 2.11.0-M7 向后移植修复程序),运行时反射不是线程安全的:http://docs.scala-lang.org/overviews/reflection/thread-safety.html .您的堆栈跟踪是问题的众多可能表现之一。

坏消息是,在 2.10.x 中,除了将所有反射操作放在同步块(synchronized block)中之外,没有解决线程不安全问题的解决方法。好消息是在 2.11.0 中问题应该消失了。

关于scala运行时反射(reflect)有时会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20121103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com