2016-06-29 38 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); 
}