gpt4 book ai didi

java - 没有未使用变量的静态 block 的替代方案

转载 作者:行者123 更新时间:2023-12-02 10:44:23 27 4
gpt4 key购买 nike

作为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.

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

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

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

那么唯一的改进是将变量访问级别降低为私有(private)吗?

 private static varType myVar = initializeClassVariable();

或者更好的方法是保留静态 block 并在那里添加方法?

static {
initializeClassVariable();
}

最佳答案

“静态 block 的替代方案”是关于初始化单个静态字段。

示例:

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();
}
<小时/>

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

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

关于java - 没有未使用变量的静态 block 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52695617/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com