替代没有未使用变量的静态块
Alternative to static blocks without unused variable
作为 alternative to static blocks,Oracle 文档建议调用方法,示例使用变量赋值:
public static varType myVar = initializeClassVariable();
The advantage of private static methods is that they can be reused later if you need to reinitialize the class variable.
但是如果我不需要(并希望避免未使用的)额外变量以及静态块中的 return 语句,调用静态代码的更好方法是什么?
在构造函数中调用静态方法是执行一次静态代码的错误设计(构造函数可以是 private
用于实用程序 class)用于静态块
public MyClass() {
MyClass.initializeClassVariable();
}
那么唯一的改进是将变量访问级别降低到私有吗?
private static varType myVar = initializeClassVariable();
或者更好的方法是保留静态块并在其中添加方法?
static {
initializeClassVariable();
}
"alternative to static blocks"是关于初始化单个静态字段。
示例:
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();
}
如果您的代码执行其他操作,则 "alternative" 不适用,您将代码编写在静态初始化程序块中。
class A {
static {
Manager.register(A.class);
}
}
作为 alternative to static blocks,Oracle 文档建议调用方法,示例使用变量赋值:
public static varType myVar = initializeClassVariable();
The advantage of private static methods is that they can be reused later if you need to reinitialize the class variable.
但是如果我不需要(并希望避免未使用的)额外变量以及静态块中的 return 语句,调用静态代码的更好方法是什么?
在构造函数中调用静态方法是执行一次静态代码的错误设计(构造函数可以是 private
用于实用程序 class)用于静态块
public MyClass() {
MyClass.initializeClassVariable();
}
那么唯一的改进是将变量访问级别降低到私有吗?
private static varType myVar = initializeClassVariable();
或者更好的方法是保留静态块并在其中添加方法?
static {
initializeClassVariable();
}
"alternative to static blocks"是关于初始化单个静态字段。
示例:
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();
}
如果您的代码执行其他操作,则 "alternative" 不适用,您将代码编写在静态初始化程序块中。
class A {
static {
Manager.register(A.class);
}
}