项目中使用excel 解析jar包 需要判断每行读取的对象是否每个字段都为空
private boolean isAllFieldNull(Object obj) throws IllegalAccessException {
Class stuCla = obj.getClass();// 得到类对象
Field[] fs = stuCla.getDeclaredFields();//得到属性集合
boolean flag = true;
for (Field f : fs) {//遍历属性
f.setAccessible(true); // 设置属性是可以访问的(私有的也可以)
Object val = f.get(obj);// 得到此属性的值
log.info("isAllFieldNull name:{}, val:{}", f.getName(), val);
if(val != null) {//只要有1个属性不为空,那么就不是所有的属性值都为空
flag = false;
break;
}
}
return flag;
}
本地运行没有任何问题,用Jenkins 部署的测试环境就会判断空行也不为空,百思不得其解,只能多打印点日志:
本地执行不会有这个属性。
总结一下
为了收集执行数据JaCoCo仪器下的测试,增加了两个成员的类的类:专用静态字段$ jacocoData和私人静态方法$ jacocoInit()。这两个成员都被标记为合成的。 请更改您的代码以忽略合成成员。无论如何,这是一个很好的做法,因为Java编译器在某些情况下创建合成成员。
增加一段判断是否为原生字段
private boolean isAllFieldNull(Object obj) throws IllegalAccessException {
Class stuCla = obj.getClass();// 得到类对象
Field[] fs = stuCla.getDeclaredFields();//得到属性集合
boolean flag = true;
for (Field f : fs) {//遍历属性
f.setAccessible(true); // 设置属性是可以访问的(私有的也可以)
Object val = f.get(obj);// 得到此属性的值
log.info("isAllFieldNull name:{}, val:{}", f.getName(), val);
// f.isSynthetic() 处理非原生字段 针对 $jacocoData合成字段
if(!f.isSynthetic() && val != null) {//只要有1个属性不为空,那么就不是所有的属性值都为空
flag = false;
break;
}
}
return flag;
}
来源:CSDN
作者:wujiandao203
链接:https://blog.csdn.net/u010211627/article/details/103469593