在Scala中,是否可以按声明顺序从对象获取val名称?

时间:2019-05-09 16:20:28

标签: scala reflection

我有几个看起来像这样的对象(val数量未知,val名称可以是随机的):

object MyObj{
  val valAbc: ChainBuilder = a
  val valDef: ChainBuilder = b
  val valGhi: ChainBuilder = c
  val valAdb: ChainBuilder = d
  val val45: ChainBuilder = e
  ...
}

并且我想执行类似的操作,将前一个条目及其值放入映射中,然后是当前条目,然后是第二个条目:

obj MyObjManager{
  def sortInMap(myObj: Object): Map[String, (ChainBuilder, String)] = {
    var myMap = mutable.Map.empty[String, (ChainBuilder, String)]
    var currentName: String = ""
    val listVals = :myObj.getClass.getDeclaredFields
    listVals.foreach{f =>
      if((current != "") && (f.getName!="MODULE$")){
        myMap.put(currentName,(myObj.getClass.getMethod(currentName).invoke(myObj), f.getName)
        current = f.getName
      }
    }
    myMap.toMap
  }
}

我的问题是,不允许MyObj.getClass.getDeclaredFields按声明顺序获取我的值,这对我来说是必不可少的。

在scala中是否有任何方法可以使用scala.reflect.runtime.universe._来确保声明顺序得到遵守?

非常感谢

0 个答案:

没有答案