【发布时间】:2021-05-17 13:50:49
【问题描述】:
我最近“继承”了一个项目并试图让一个服务实例在本地运行。我遇到了 - 并修复了 - 一些类似于...的代码问题。
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 被抛出。此错误与初始化 B 类有关(静态初始化,没有实例化!!)。
仅供参考>解决此问题可以通过两种方式完成...
-
A 类,使用
Class.forName("fully.qualified.package.B", false, this.getClass().getRuntime());- 其中第二个参数false不会初始化该类。 -
B 类,使用普通数组初始化
static String[] bar = { "Something" };。
我感兴趣的是……
为什么通过(String[]) Arrays.asList(...).toArray() 进行的有些过度设计的初始化会导致这样的错误?
解决方案/编辑:它与静态初始化无关,数组初始化完全错误,见下文...
【问题讨论】:
标签: java java.lang.class