2016-06-29 12 views
0
for(Deductible **myDeductible**: myDeductibles){ 
    myReturnList.add(myOption); // Add options as many times as number of deductibles 
    if(CoverageConstants.COVERAGE_CODE_VC.equalsIgnoreCase(aCoverage.getCoverageCd()) && 
      !CoverageConstants.OPTION_CODE_ONE.equals(myOption.getOptionCd())){ 
     break; 
    } 
} 

上升代码如何解决未使用的局部变量myDeductible。请给出建议。PMD问题有待修复

+0

您可以抑制警告('@ SuppressWarnings')或者使用局部变量,除非将警告视为错误,否则不是错误。 –

+0

我无法使用...任何代码更改我发现??我甚至不能使用超压警告 – susho90

+0

您可以为这个变量添加一个非常低的级别的记录器,以便它将打印在日志文件中,除非您配置了低级别在日志配置文件中。 – notionquest

回答

0

代替for(Deductible myDeductible: myDeductibles){使用旧式循环:

for(int count = 0; count < myDeductibles.size(); count++) { 
+0

任何其他选项根据应用标准...我必须使用新的循环格式... – susho90

+0

要么这或SuppressWarnings –

0

PMD让你知道你分配而不使用myDeductible,即有猫腻。

看着你提供的片段中,我们可以看到几个输入(myDeductiblesmyOptionaCoverage)和一个输出(myReturnList)。此外还有一个循环,它填充了myReturnListmyOption,并且是一个打破循环的条件。

仔细研究一下这个条件告诉我们,在循环内条件要么总是true要么总是false,假设getter没有副作用并且总是返回相同的结果。

由此我们可以推断,一旦循环结束myReturnList可以拥有的只有一个人完全三种状态:

  1. myDeductibles为空,则myReturnList是空
  2. myDeductibles不为空,条件是true然后myReturnList恰好包含一个myOption,因为在添加第一个条件之后条件打破循环myOption
  3. myDeductibles不为空,条件是false然后myReturnList包含了一样多的myOption S作为中存在的元素myDeductibles

您可能已经注意到,上面没有这三个结果取决于myDeductibles元素本身,只元素的数量。这就是PMD试图告诉我们的。

现在我们知道什么是循环真的这样做,我们可以通过实现三个结果,而无需使用的myDeductibles元素修复警告:

List<Option> myReturnList; 

if (myDeductibles.isEmpty()) { 
    myReturnList = Collections.emptyList(); 

} else if (CoverageConstants.COVERAGE_CODE_VC.equalsIgnoreCase(aCoverage.getCoverageCd()) 
      && !CoverageConstants.OPTION_CODE_ONE.equals(myOption.getOptionCd())) { 
    myReturnList = Collections.singletonList(myOption); 

} else { 
    myReturnList = Collections.nCopies(myDeductibles.size(), myOption); 
}