修复PMD警告时遇到一些困难,这是我的简化方法:
public String rank(String keyword, int pageSize, int totalPage)
{
String result = "0"; // A: DataflowAnomalyAnalysis: Found 'DD'-anomaly for variable 'result'
if (isNotBlank(keyword))
{
boolean find = false; // B: DataflowAnomalyAnalysis: Found 'DD'-anomaly for variable 'find'
for (int page = 1; page < totalPage; page++)
{
int rank = getRank(keyword, pageSize, totalPage);
if (rank != 0)
{
find = true; // B(1)
result = String.valueOf(rank); // A(1)
break;
}
}
if (!find)
{
result = format("{0}+", totalPage * pageSize - 1); // A(2)
}
}
return result;
}
我尝试过此操作,并收到“ OnlyOneReturn”警告:
public String rank(String keyword, int pageSize, int totalPage)
{
if (isNotBlank(keyword))
{
for (int page = 1; page < totalPage; page++)
{
int rank = getRank(keyword, pageSize, totalPage);
if (rank != 0)
{
return String.valueOf(rank); // OnlyOneReturn
}
}
return format("{0}+", totalPage * pageSize - 1); // OnlyOneReturn
}
return "0";
}
我必须如何编写此代码?
DD异常-数据流分析告诉您,您多次分配了一个变量,而没有在分配之间使用它。因此,除了最后一次分配外,所有其他操作都是不必要的。它通常表明您没有正确分离方案。您的情况有以下三种情况:
totalPage * pageSize - 1
+”如果您一个接一个地实现这些方案,那么最终会遇到一种没有任何数据流或其他PMD问题的方法:
public String rank(String keyword, int pageSize, int totalPage) {
String result;
if (isNotBlank(keyword)) {
result = "0";
} else {
int rank = 0;
for (int page = 1; page < totalPage && rank == 0; page++) {
rank = getRank(keyword, pageSize, totalPage);
}
if (rank != 0) {
result = String.valueOf(rank);
} else {
result = format("{0}+", totalPage * pageSize - 1);
}
}
return result;
}
[如果仔细看一下for循环,您会看到page
仅用于循环。它不在循环内使用。这表明可能不需要for循环。 getRank(keyword, pageSize, totalPage)
应该始终返回相同的值,因为其参数在循环期间永不更改。因此,只需调用一次getRank(...)
就足够了。