替代没有未使用变量的静态块

时间:2018-10-08 04:57:51

标签: java static-block unused-variables

作为alternative to static blocks,Oracle文档建议调用一个方法,并且该示例使用变量赋值:

public static varType myVar = initializeClassVariable();
     

私有静态方法的优点是,如果您需要重新初始化类变量,则可以在以后重用它们。

但是,如果我不需要(并希望避免使用未使用的)额外变量,并且还可以在我的静态块中返回语句,那么调用静态代码的更好方法是什么?

在构造函数中调用静态方法是对静态块执行一次静态代码(对于实用程序类,构造函数可以为private)的错误设计

public MyClass() {
     MyClass.initializeClassVariable();
}

那么唯一的改进就是降低了对私有变量的访问级别吗?

 private static varType myVar = initializeClassVariable();

还是更好的方法是保留静态块并在其中添加方法?

static {
    initializeClassVariable();
}

1 个答案:

答案 0 :(得分:1)

“替代静态块”是关于初始化单个静态字段。

示例:

class A {
    static Map<String, Integer> romans;
    static {
        romans = new HashMap<>();
        romans.put("I", 1);
        romans.put("V", 5);
        romans.put("X", 10);
    }
}

替代:

class A {
    static Map<String, Integer> romans = initRomans();

    private static Map<String, Integer> initRomans() {
        Map<String, Integer> r = new HashMap<>();
        r.put("I", 1);
        r.put("V", 5);
        r.put("X", 10);
        return r;
    }
}

如文章所述,使用此代码,您可以重置静态字段。

    public static void resetRomans() {
        romans = initRomans();
    }

如果您的代码执行其他操作,则“替代”选项不适用,您可以在静态初始化程序块中编写代码。

class A {
    static {
        Manager.register(A.class);
    }
}