【发布时间】:2013-12-05 22:20:33
【问题描述】:
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()
}
}
}
当我在其他类中调用caseFields 方法时,我定义了一个对象Reflects
有时此方法会引发以下异常
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]
还有其他奇怪的例外。
这个方法有什么问题
【问题讨论】:
-
您的堆栈跟踪没有显示在您的代码中引发异常的位置。我推测您没有检查
members大小。 -
@pedrofurla 即使成员大小为零。此方法应返回空地图。我认为这与 scala-reflect 相关
-
你能发布完整的堆栈跟踪吗?另外,您是否在多个线程中运行此方法?
-
@jilen 非常真实,我很傻。
-
@EugeneBurmako 我在一个或多个 akka actor 中调用该方法。
标签: scala scala-compiler