3
我有以下特點:如何爲每個子類創建一份數據副本?
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。我不能把這個特質變成一個班級。
實現trait中的所有邏輯,然後創建實現這個特徵的對象應該可以工作。在每種情況下,getClass都意味着特定的子類/對象...我希望我能正確理解你要完成的任務 –