私には次の特徴があります。
trait Mappable {
def toMap = {
val mappableFields = this.getClass.getDeclaredFields.filter(...)
...
}
}
mappableFields
リストthis.declaredFields
に静的フィルターを適用します。そのため、を実装するクラスごとに不変でMappable
あり、理想的には、サブクラスのシングルトンオブジェクトまたはそれらの線に沿った何かに配置できるようにしたいと考えています。私の現在の解決策は
object Mappable {
import scala.collection.mutable.Map
private val fieldMap = Map[Class[_], Array[Field]]()
def getFieldMap(clazz: Class[_]) = {
fieldMap.get(clazz) match {
case Some(array) => array
case _ => {
val mapFields = clazz.getDeclaredFields.filter(...)
fieldMap.put(clazz, mapFields)
mapFields
}}}}
trait Mappable {
def toMap = {
val mappableFields = Mappable.getFieldMap(this.getClass)
...
}
}
しかし、Map#get の呼び出しを必要としない、より良い解決策があるかどうか疑問に思っています。特性をクラスに変換できません。