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

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);
    }
}