gpt4 book ai didi

java - 如何初始化静态 block ?

转载 作者:行者123 更新时间:2023-12-01 11:57:44 24 4
gpt4 key购买 nike

我必须使用一堆包含 static block 的静态遗留类。这些类本身只是带有静态方法的辅助类。

示例:

public abstract class Legacy {
protected static final String[] ARRAY;

static {
//init that ARRAY
}

public static String convert(String value) {
//makes use of the ARRAY variable
}
}

重要提示:我无法控制源代码,因此无法修改代码。我知道这是类构建方式中的一个严重的设计缺陷。

问题:当同时访问该类时,如果该类尚未初始化,我会从遗留类中收到异常。所以我必须确保在应用程序启动时每个静态类之前都已正确初始化。

但是我该怎么做呢?

我尝试如下:

Legacy.class.newInstance();

但这会导致以下错误:

java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:374)

所以我可能做错了?

最佳答案

静态初始化器是线程安全的,因为它们只能由单个线程运行。

如果该类由多个类加载器加载,它们可能会运行多次,但在这种情况下,它们实际上是在初始化不同的类。

因此,您所看到的问题不太可能是由于初始化不完整造成的。

您的 convert 方法似乎更有可能正在执行非线程安全的操作,例如修改数组。

关于java - 如何初始化静态 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28301952/

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