sdk*_*ldf 10 reflection scala field
PHP引入了一种方法,允许您选择实例的所有公共值.在Scala有什么办法吗?即获取实例化类(非对象)的所有公共字段的所有值.
让我们假设我有这门课
class TestElement( datatype: Datatype, var subject: String, var day: Int, var time: Int )
  extends DataElement( datatype: Datatype ) {    
   def to( group: Group ) = group.add( this );
}
var element = new TestElement( datatype, "subject", 1, 1 );
我需要的方法是获取一个Map或两个值集合.
var element.method                                       // the function I need
ret: ( ("subject", "subject"), ("day", 1), ("time", 1) ) // its output
Dun*_*gor 21
这是睡觉时间,所以我没有时间为一个完整的答案,而是看结果element.getClass.getFields(或getDeclaredFields私人领域) -你可以调用getValue(element)的Field对象来获取它们的值.
现在醒来,仍然没有更好的答案,所以:
首先,请注意,在Java术语中,您的类没有公共字段主题,它具有私有字段主题和访问者方法subject()和subject_ $ eq(String).
您可以如上所述迭代私有字段对象,从对中填充映射:
def getFields(o: Any): Map[String, Any] = {
  val fieldsAsPairs = for (field <- o.getClass.getDeclaredFields) yield {
    field.setAccessible(true)
    (field.getName, field.get(o)) 
  }
  Map(fieldsAsPairs :_*)
}
现在,您可以在TestElement上定义此方法(替换o为this),或者更通常有用地定义转换,以便您可以在任何引用上调用getFields
implicit def any2FieldValues[A](o: A) = new AnyRef {
  def fieldValues = getFields(o)
}
以便
element.fieldValues 
会得到你想要的结果.
| 归档时间: | 
 | 
| 查看次数: | 6921 次 | 
| 最近记录: |