我在scala中使用以下方法来获取类中的所有字段:
val fields = contract.getClass.getDeclaredFields.toList.map(value => {
value.setAccessible(true)
value.getName
})
contract
已在我的代码中定义为一个类。
由于我使用反射,问题是我得到另一个元素$jacocoData
作为其中一个字段。我想忽略这个领域。 “hacky”这样做的方法是知道它总是附加在列表的末尾,因此我可以通过将我的函数签名更改为包含productArity
来“修复”它,并且仅采用第一个{ {1}}这样的元素数量:
arity
根据this FAQ的最后一点,我需要摆脱一个类的合成成员。我该怎么做?
答案 0 :(得分:7)
简单地假设$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
})