It's time for bed, so I don't have time for a full answer, but look at the results of element.getClass.getFields
(or getDeclaredFields
for private fields) - you can call getValue(element)
on the Field
objects to fetch their values.
Awake now, and still no better answer, so:
First, note that in Java terms, your class doesn't have a public field subject, what it has is a private field subject and accessor methods subject() and subject_$eq(String).
You can iterate over the private field objects as described above, populating a Map from the pairs:
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 :_*)
}
Now you can either define this method on TestElement (replacing o
with this
), or more generally usefully define a conversion so that you can call getFields on any reference
implicit def any2FieldValues[A](o: A) = new AnyRef {
def fieldValues = getFields(o)
}
So that
element.fieldValues
will give the result you want.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…