1

代码:

Field[] fields = obj.getClass().getDeclaredFields();

obj 是一个有 2 个字段的类。

public class NullInfo implements Data {

    @Idx(0)
    private Integer index;

    @Idx(1)
    private String  fieldName;
}

接口数据为空。

我的问题是:字段长度预计只有 2。 见截图

$jacocoData是什么?</p>

4

2 回答 2

1

我猜这个问题是当你用 Jacoco 运行代码覆盖率时引起的。

根本原因:

出于@Godin 解释的原因,jacoco 将为您的课程添加一个静态字段。

解决方案:

您只需要在“原始”字段上使用 Java 反射。您可以明确排除名为“$jacocoData”的字段,也可以使用注释作为过滤器,例如

Field field = fields[i];
Idx annotation = field.getAnnotation(Idx.class);
if (annotation == null) {
    continue;
}
于 2019-01-16T09:03:22.087 回答
1

什么是$jacocoData

引用JaCoCo 常见问题解答

我的代码使用反射。为什么当我用 JaCoCo 执行它时它会失败?

为了收集执行数据,JaCoCo 检测了被测试的类,它向类添加了两个成员:一个私有静态字段$jacocoData和一个私有静态方法$jacocoInit()。两个成员都被标记为综合

请更改您的代码以忽略合成成员。无论如何,这是一个很好的做法,因为 Java 编译器也会在某些情况下创建合成成员。

方法https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html#isSynthetic()允许确定合成字段。

于 2018-11-30T22:56:17.170 回答