我有以下特点:
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 的解决方案。我不能把特质变成一个类。