作为alternative to static blocks,Oracle文档建议调用一个方法,并且该示例使用变量赋值:
public static varType myVar = initializeClassVariable();
私有静态方法的优点是,如果您需要重新初始化类变量,则可以在以后重用它们。
但是,如果我不需要(并希望避免使用未使用的)额外变量,并且还可以在我的静态块中返回语句,那么调用静态代码的更好方法是什么?
在构造函数中调用静态方法是对静态块执行一次静态代码(对于实用程序类,构造函数可以为private
)的错误设计
public MyClass() {
MyClass.initializeClassVariable();
}
那么唯一的改进就是降低了对私有变量的访问级别吗?
private static varType myVar = initializeClassVariable();
还是更好的方法是保留静态块并在其中添加方法?
static {
initializeClassVariable();
}
答案 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);
}
}