Время спать, поэтому у меня нет времени на полный ответ, но посмотрите на результаты element.getClass.getFields
(или getDeclaredFields
для частных полей) - вы можете позвонить getValue(element)
на Field
объекты для извлечения их значений.
Проснись сейчас, и все еще не лучший ответ, поэтому:
Во-первых, обратите внимание, что в терминах Java ваш класс не имеет субъекта открытого поля, то, что у него есть, это субъект частного поля и методы аксессора subject () и subject_ $ eq (String).
Вы можете перебирать объекты частного поля, как описано выше, заполняя Map из пар:
def getFields(o: Any): Map[String, Any] = {
val fieldsAsPairs = for (field <- o.getClass.getDeclaredFields) yield {
field.setAccessible(true)
(field.getName, field.get(o))
}
Map(fieldsAsPairs :_*)
}
Теперь вы можете либо определить этот метод в TestElement (заменив o
на this
), либо в более общем смысле определить преобразование, чтобы вы могли вызывать getFields для любой ссылки
implicit def any2FieldValues[A](o: A) = new AnyRef {
def fieldValues = getFields(o)
}
Так что
element.fieldValues
даст желаемый результат.