Class.forName + ExceptionInInitializerError + 静态初始化 + 奇怪的数组初始化

Class.forName + ExceptionInInitializerError + static initialization + weird Array init

我最近“继承”了一个项目,并试图在本地获取一个服务实例 运行ning。我遇到并修复了一些类似于...

的代码问题
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。这个错误与初始化Class B有关(静态初始化,没有实例化!!)。

仅供参考 > 可以通过两种方式解决此问题...

我感兴趣的是...

为什么通过 (String[]) Arrays.asList(...).toArray() 过度设计的初始化会导致这样的错误?


Solution/Edit: 与静态初始化无关,数组初始化完全错误,见下文...

(String[])Arrays.asList("Something").toArray(); 将在运行时失败:它不返回 String[],而是返回 Object[]Object[]String[] 是可具体化的类型,因此它是经过检查的转换,并且因为 Object[] 不是 String[],所以它失败了。

使用Arrays.asList("Something").toArray(new String[0]);或者只是 new String[]{"Something"}.