2013-03-01 10 views
5

Mi sono imbattuto in un caso speciale in cui non sono in grado di risolvere l'anomalia DD in PMD. Supponiamo che il codice è:Inevitabile anomalia DD in PM

BigDecimal amount = BigDecimal.ZERO; 
for(int i=0;i<5;i++) 
{ 
     amount = amount.add(i); 
} 
return amount; 

In esecuzione di questo codice tramite PMD, mostrerà un'anomalia DD alla dichiarazione di quantità. Tuttavia se rimuovo l'inizializzazione otterrò un'eccezione. Come può questa situazione passare attraverso PMD. Chiunque?

risposta

10

Dalla pagina "controversial rules", sezione DataflowAnomalyAnalysis:

DD - Anomaly: Una variabile recentemente definito viene ridefinito. Questo è inquietante, ma non deve essere un bug.

In questo caso, non è sicuramente un bug. Suggerisco di sopprimere o ignorare l'avviso per questo caso specifico. (Il fatto che il valore originale sia usato per calcolare il valore successivo suggerisce che la regola avrebbe potuto essere scritta meglio, per essere onesti.)

È molto importante capire i motivi delle regole e scegliere le regole che si obbediscono e dove. Ad esempio, I fortemente non sono d'accordo con la regola "un solo punto di uscita": ci sono molte volte che avere più di un punto di uscita rende un metodo molto più semplice da leggere. Sii selettivo, e se una regola è normalmente, ma hai verificato che il tuo codice è corretto in questo caso specifico, suppress the warning solo in quel luogo.

+1

grazie molto amico .... molto raramente qualcuno mi dice che ho ragione e c'è qualche problema con la provvidenza (leggi PMD, eclissi) .... –