gpt4 book ai didi

scala - 在 Scala 的类字段中查找合成成员

转载 作者:行者123 更新时间:2023-12-04 18:08:28 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com