Domanda

Sto usando PMD per analizzare il codice e produce un paio di avvertimenti ad alta priorità, che non so come risolvere il problema.

1) Avoid if(x!=y)..; else...; Ma che cosa devo fare se ho bisogno di questa logica? Cioè, ho bisogno di controllare se x!=y? Come posso refactoring?

2) Use explicit scoping instead of the default package private level. Ma la classe è infatti utilizzata solo all'interno del pacchetto. Quello modificatore di accesso devo usare?

3) Parameter is not assigned and could be declared final. Dovrei aggiungere parole chiave finale per tutti i luoghi che PMD sottolineato con questo avvertimento?

È stato utile?

Soluzione

Evitare negazione: Invece di if( x!=y ) doThis() else doThat(), assegno per caso positivo prima, perché le persone / esseri umani tendono a come le cose positive più che negativo. Si torce il cervello di dover invertire la logica in mente durante la lettura del codice sorgente. Così, invece, scrivere:

 if ( x!=y ) doThis() else doThat()       // Bad - negation first
 if ( x==y ) doThat() else doThis()       // Good - positive first

scoping esplicito: PMD sito , è una regola discutibile. Si può odiarlo, qualcun altro piace. Che cosa si dovrebbe fare è rendere tutti i campi all'interno delle classi privato. Sembra che ci sia un campo o metodo (non una classe) con una visibilità pacchetto, ad esempio qualcosa di simile a questo:

 class Foo {
   /* private missing */ Object bar;
 }

Parametri finale: parametri metodo dovrebbe essere finale per evitare riassegnazione accidentali. Questo è solo una pratica buona. Se si utilizza Eclipse, il contenuto assistere anche mette a disposizione una quickfix chiamato "Modifica modificatori di finale dove possibile" . Basta selezionare tutto il codice nell'editor con Ctrl-A e poi premere Ctrl-1.

Altri suggerimenti

Non è necessario attivare tutte le regole. Scegli alcune delle regole che si accetta di e refactoring del codice fino a tutti gli avvisi vengono cancellati.

1 - Refactor ad una logica if (x == y) ... else .... Basta evitare condizioni negative in se statments, fanno codice più difficile da comprendere

2 -. Non consentire che regola

3 - Un sacco di persone dichiarano un sacco di campi e le variabili finali. Soprattutto quando vogliono assicurarsi o di esprimere che il valore di una variabile non deve essere modificato nel metodo. Se non lo fai così, disabilitare questa regola.

Questi tutti sembrano avvertimenti minori che poteva essere spento.

1) Vuole di capovolgere la logica

if(x==y) {
    //old else clause
} else {
    //old if clause
}

2) Se il pacchetto è in realtà il corretto accesso che si desidera, non v'è alcun modificatore di accesso da aggiungere. Io sono abbastanza non hanno familiarità per sapere se c'è un modo per sopprimere questo avvertimento specifico.

3) Una questione di stile. Alcune persone vogliono finale su tutto ciò che potrebbe essere su. Altri pensa aggiunge troppa confusione per alle poche informazioni. Se siete in quest'ultimo campo, trasformare questo avvertimento off.

Per quanto riguarda il primo elemento (la disuguaglianza) ci sono due problemi:

1) leggibilità della doppia negazione.

Diciamo che avete:

if(x!=y) { false clause } else { true clause }

La seconda clausola viene eseguito se "non x non è uguale a y".

Questo può essere riscritta come:

if (x==y) {true clause } else {false clause}.

2) Correttezza: se X e Y non sono-primitive, usando if(!x.equals(y)) è più sicuro. Questo è l'equivalente di utilizzare == invece di .equals () e può portare a errori molto gravi.

È inoltre possibile utilizzare // NOPMD alla fine di ogni riga in cui non si vuole regole PMD da controllare.

Per esempio, per quanto sopra determinato codice è possibile sopprimere controllo PMD dando,

class Foo {
   /* private missing */ Object bar; // NOPMD
 }

Si prega di essere consapevole del fatto che il commento di cui sopra può silenziosamente sopprimere altri avvisi del stesso di linea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top