2015-06-24 8 views
5

Relativamente alla Regola calamari: i numeri magici S109 non devono essere utilizzatiSonarQube: Nel caso in numeri magici essere ammessi in enumerazioni costruttore java

non dovrebbe essere permesso di avere i numeri nel costruttore di un enum in Java? Il seguente codice non dovrebbe violare la regola a mio parere.

public enum Color{ 
    RED(42), 
    GREEN(123456), 
    BLUE(666); 

    public final int code; 

    Color(int colorCode){ 
     this.code=colorCode; 
    }  
} 

Sto utilizzando la versione Sonar Java Plugin 3.3

risposta

0

Tecnicamente, sì, non c'è niente di sbagliato con il codice. Il codice mostra che il codice colore per ogni tipo di enum si basa sul costruttore (come il rosso è 42). Ma, la regola del calamaro impone che questo possa essere "confuso" quando qualcuno sta cercando di eseguire il debug del codice (in particolare, una grande parte di codice).

Questo è preso dalla regola calamaro documentation.

L'uso di numeri magici può sembrare ovvio e diretto quando si scrive un pezzo di codice, ma sono molto meno chiari e chiari al momento del debug.

Ecco perché i numeri magici devono essere demistificati prima di essere assegnati a costanti chiaramente denominate prima di essere utilizzate.

-1, 0 e 1 non sono considerati numeri magici

Così, nel codice, si consiglia di fare qualcosa di simile.

public enum Color{ 
    public final int RED_CODE = 42; 
    RED(RED_CODE); 

    public final int code; 

    Color(int colorCode){ 
     this.code=colorCode; 
    }  
} 

o potrebbe anche disabilitare la regola: D

+0

Conosco la regola e sono d'accordo con esso. Quindi non voglio disabilitarlo. L'estrazione degli argomenti del costruttore in costanti riduce la leggibilità del codice. Mentre la regola è proprio lì per aumentarla. Ma per fortuna sarà risolto in 3.4. – DEG

Problemi correlati