gpt4 book ai didi

java - PMD 的数据流异常分析警告

转载 作者:太空宇宙 更新时间:2023-11-04 13:02:35 25 4
gpt4 key购买 nike

我将 Eclipse 与 PMD 插件 (4.0.0.v20130510-1000) 一起使用,并遇到了很多此类违规情况:

发现变量“freq”存在“DD”异常(第“187”-“189”行)。
发现变量“freq”存在“DU”异常(第“189”-“333”行)。

this所以答案,它说这些异常与分配从未读取的值有关。但我在这种情况下遇到了违规行为:

// here I get a DD anomaly
double freq = 0;
try {
// here I get a DU anomaly
freq = Double.parseDouble(getFrequencyTextField().getText());
} catch (final NumberFormatException e) {
Log.e(e.getMessage());
}
if (freq < 10E6) doSomething();

如果我删除初始化并在 catch block 中添加 freq = 0; 行,DD 异常就会消失,但我在两个作业上都会出现 DU 异常。

现在我的问题是:我应该如何处理这个问题? PMD 的首选解决方案是什么?这条规则到底想阻止什么(即为什么这是不好的做法)?

最佳答案

double freq; // (1)
try {
// here I get a DU anomaly
freq = Double.parseDouble(getFrequencyTextField().getText());
} catch (final NumberFormatException e) {
Log.e(e.getMessage());
freq = 0; // (2)
}
if (freq < 10E6) doSomething();

第一个问题是在 catch 中,parseDouble 分配没有完成到 freq。在异常情况下,频率仍为 0。也许可以标记。因此,当分配给 catch 内的 freq 时,它就会消失。

当在 catch (2) 中分配给 freq 时,初始分配 (1) 永远不会被读取,因此只需声明即可。

关于更好的风格:

try {
// here I get a DU anomaly
double freq = Double.parseDouble(getFrequencyTextField().getText());

if (freq < 10E6) doSomething();
...

} catch (final NumberFormatException e) {
Log.e(e.getMessage());
}

或者按照@JoachimSauer的答案,使用不会引发异常的双重转换。日志记录将表明优先于上述风格的严重程度。在发生错误时在简单的转换函数中进行日志记录可能不是一种好的方式:日志记录过多、忽略日志记录(?)、难以修复。

关于java - PMD 的数据流异常分析警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812836/

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