我在 scala 中使用以下方法来获取类中的所有字段:
val fields = contract.getClass.getDeclaredFields.toList.map(value => {
value.setAccessible(true)
value.getName
})
contract
已在我的代码中定义为一个类。
由于我使用反射,问题是我得到了另一个元素$jacocoData
作为领域之一。我想忽略这个字段。这样做的“hacky”方法是知道它总是附加在列表的末尾,因此我可以通过更改我的函数签名以包含来“修复”它productArity
并且只取第一个arity
像这样的元素数量:
def getFields(contract: Contract, arity: Int): List[String] = {
val fields = contract.getClass.getDeclaredFields.toList.map(value => {
value.setAccessible(true)
value.getName
})
//to ignore $jacocoData (Java code coverage) field
val firstnFields = fields.take(arity)
firstnFields
}
根据最后一点this FAQ http://www.eclemma.org/jacoco/trunk/doc/faq.html,我需要摆脱一个类的合成成员。我怎么做?
简单地假设$jacocoData
总是最后一个元素是危险的,因为Class#getDeclaredFields()
不保证任何订单 http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getDeclaredFields%28%29.
检查字段是否是综合使用Field#isSynthetic() http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html#isSynthetic%28%29,因此您的代码可以更改为:
val fields = contract.getClass.getDeclaredFields.
toList.withFilter(!_.isSynthetic()).map(value => {
value.setAccessible(true)
value.getName
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)