因为这毫无意义,这样只是定义了引用为static final,数组的内容还是可以随意改变的,将数组声明为public更是一个安全漏洞,这意味着这个数组可以被外部类所改变。

但是我们可以把数组声明为final类型。

在使用final修饰基本类型变量的时候,不可以对基本类型变量重新赋值,所以的话,基本类型变量不能被改变,可是对于引用类型变量来说的话,它保存的仅仅是一个引用,final只保证这个引用类型变量所引用的地址不会改变,也就是一直引用同一个对象,但这个对象完全可以发生改变。

Integer areaTotal = 0;
if(id==null||id==0){
  Example example = new Example(AreaInfo.class);
  example.createCriteria().andNotEqualTo("areaName",areaName)
.andEqualTo("enterpriseId",curUser.getEnterpriseId())
.andEqualTo("baseId",baseId);
  List<AreaInfo> areaInfos = areaInfoMapper.selectByExample(example);
  areaInfos.stream().forEach(item -> {
  areaTotal += item.getAreaArea();
  });
  if (baseInfo.getBaseArea() < areaTotal + areaInfo.getAreaArea()) {
  return Result.operating("地块面积大于基地面积", false, ResultCode.SUCCESS);
  }
}

注意:此时areaTotal中会提示“variable used in lambda expression should be final or effictively final”,

此时,将鼠标放到areaTotal中,按住alt + enter键,选中Transform 'areaTotal' into final one element array,意思是将areaTotal转为只有一个元素的final数组。

结果如下:

final Integer[] areaTotal = {0};
if(id==null||id==0){
Example example = new Example(AreaInfo.class);
  example.createCriteria().andNotEqualTo("areaName",areaName)
.andEqualTo("enterpriseId",curUser.getEnterpriseId())
.andEqualTo("baseId",baseId);
  List<AreaInfo> areaInfos = areaInfoMapper.selectByExample(example);
  areaInfos.stream().forEach(item -> {
  areaTotal[0] += item.getAreaArea();
  });
  if (baseInfo.getBaseArea() < areaTotal[0] + areaInfo.getAreaArea()) {
   return Result.operating("地块面积大于基地面积", false, ResultCode.SUCCESS);
  }
}

 

posted on 2022-02-22 14:03  周文豪  阅读(530)  评论(0编辑  收藏  举报