我最近“继承”了一个项目,并试图让一个服务实例在本地运行。我遇到了 - 并修复了 - 一些类似于...的代码问题
class A {
// ...
public void doSomething() {
// ...
Class foo = Class.forName("fully.qualified.package.B");
// ...
}
// ...
}
class B {
static String[] bar = (String[])Arrays.asList("Something").toArray();
//...
}
运行 Class A.doSomething() 时,ExceptionInInitializerError
抛出了 an 。此错误与初始化 B 类有关(静态初始化,没有实例化!!)。
仅供参考>解决此问题可以通过两种方式完成...
- Class A,使用
Class.forName("fully.qualified.package.B", false, this.getClass().getRuntime());
- 其中第二个参数false
不初始化该类。 - B 类,使用普通数组 init
static String[] bar = { "Something" };
。
我感兴趣的是...
为什么有些过度设计的初始化 via(String[]) Arrays.asList(...).toArray()
会导致这样的错误?
解决方案/编辑:它与静态初始化无关,数组初始化是完全错误的,见下文......