CWE-681:避免Java中不兼容变异期间的数字数据损坏
根据CISQ标准和CAST扫描工具,我得到了一个名为“在不兼容变异期间避免数字数据损坏”的错误。下面是原始代码。你知道如何避免这种情况吗CWE-681:避免Java中不兼容变异期间的数字数据损坏,java,precision,Java,Precision,根据CISQ标准和CAST扫描工具,我得到了一个名为“在不兼容变异期间避免数字数据损坏”的错误。下面是原始代码。你知道如何避免这种情况吗 public int getAge() { return (int) ChronoUnit.YEARS.between(getFoedselsdato(), LocalDate.now()); } 我尝试过使用JAVA 8对JAVA.Math.toIntExact进行加密,但我不确定这有什么不同。 return toIntExact(Chron
public int getAge() {
return (int) ChronoUnit.YEARS.between(getFoedselsdato(), LocalDate.now());
}
我尝试过使用JAVA 8对JAVA.Math.toIntExact进行加密,但我不确定这有什么不同。
return toIntExact(ChronoUnit.YEARS.between(LocalDate.of(2014,1, 1), LocalDate.now()));
正如@AndyTurner在评论中所表示的,问题在于从
long
到int
的转换,这可能导致错误的计算
可能的解决方法是将返回类型更改为long
,这可能会导致将强制转换移动到其他位置,或者使用toIntExact
与普通的旧模式不同的是,如果
long
实际上不适合int
,toIntExact
实际上会引发算术异常
,除非你比较过去或未来20亿年的日期,否则这不是一个实际问题。如果必须,请使用来执行,否则只需抑制它即可。