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을 호출 할 필요가 없습니다. 나는 그 특성을 계급으로 바꿀 수 없다.
특성의 모든 논리를 구현 한 다음이 특성을 구현하는 개체를 만들어야 작동합니다. 각각의 경우에 getClass는 특정 하위 클래스/객체를 의미합니다 ... 나는 당신이 성취하고자하는 것을 정확히 이해하기를 바랍니다. –