JAVA.MAGIC.NUMBER

使用されるマジックナンバー: 数字。

マジックナンバーが使用されています。このチェッカーは、バイナリ演算でのマジックナンバーの使用にフラグを立てます。

脆弱性とリスク

マジックナンバーの使用により、保守性が損なわれます。

軽減と防止

final 修飾子を使用して定数変数を宣言します。

例 1

コピー
public class C11 {

    double d314 = 3.14; //NG
    int i0 = 0;//OK 0 is exception
    int i1 = 1;//OK 1 is exception
    int i2 = 2;//NG
    final int final_i2 = 2;//OK
    int assign_final_i2 = final_i2;//OK
    int assign_final_i2_and_magicnum = final_i2 + 3;//NG
    char c1 = '1';//NG
    final char final_c1 = '1';//OK
    String s1 = "string1";//NG
    final String sf1 = "string1";//OK

    final double fDB314 = 3.14;//OK
    double var_init_with_const = fDB314;

    public void somefunc_number(double a, int b) {

    }

    public void somefunc_char(char str) {

    }
    public void somefunc_string(String str) {

    }

    public void test_number(int v, String strVar) {
        double local_var = 3.14;//NG
        if (v < 3) {//NG
            somefunc_number(v, 2);//NG
            somefunc_number(3.1, v);//NG
            somefunc_number(v, v);//OK
        }
        if (0 != v) {//NG
        }
    }

    public void test_char(char v) {
        char local_var = 'a';//NG
        final char final_local_var = 'a';//OK
        if (v != '3') {//NG
            somefunc_char('a');//NG
            somefunc_char(v);//OK
        }
        if ('0' != v) {//NG
        }

    }

    public void test_string(String v) {
        String local_var = "a";//NG
        final String final_local_var = "fix";//OK
        if (v.length() != "3".length()) {//NG
            somefunc_string("a");//NG
            somefunc_string(v);//OK
        }
        if ("0".length() != v.length()) {//NG
        }

    }

}