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 }