reflection, no big deal
Aug. 8th, 2014 05:14 pmI have a mock db, I want to insert a row in a table; the thing is, id were recently converted from
var to val (it was an ancient idea of having variable id, something very weird). Now I had to use reflection, so I did.
override def insert(o: T): T = {
val fields = fieldsOf(o.getClass)
val idField = fields("id")
idField.set(o, globalID)
globalID += 1
update(o)
o
}
}
private def fieldsOf(clasz: Class[_]):Map[String, Field] = {
def listFields(c: Class[_]): List[Field] =
if (c==null) Nil else
c.getDeclaredFields .filter (!_.getName.contains("$") ) .toList ++ listFields(c.getSuperclass)
val fields = listFields(clasz)
fields foreach (_.setAccessible(true))
fields map (f => f.getName -> f) toMap
}