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
, когда я invole caseFields
метод в другом классеScala среда отражают иногда бросает исключение
Иногда этот метод бросает следующее исключение
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
@pedrofurla Даже если размер членов равен нулю. этот метод должен возвращать пустую карту. Я думаю, что это что-то связано с scala-reflect – jilen
Не могли бы вы опубликовать полную трассировку стека? Кроме того, вы запускаете этот метод в нескольких потоках? –