我在 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的最后一点,我需要摆脱类的合成成员。我怎么做?
最佳答案
简单地假设 $jacocoData
总是最后一个元素是危险的,如 Class#getDeclaredFields()
does not guarantee any order .
要检查字段是否为合成字段,请使用 Field#isSynthetic()
,因此您的代码可以更改为:
val fields = contract.getClass.getDeclaredFields.
toList.withFilter(!_.isSynthetic()).map(value => {
value.setAccessible(true)
value.getName
})
关于scala - 在 Scala 的类字段中查找合成成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20519347/