如何强制初始化类?[已关闭]

2022-08-31 20:55:58

最好的和最干净的方法是什么?具体来说,我需要静态初始值设定项块中的一些代码才能在该类中运行,但我想使它尽可能干净。


答案 1

正在加载 != 初始化。

您希望初始化您的类(这是执行静态块时,以及其他事项)。

Java语言规范的摘录说:

类或接口类型 T 将在第一次出现 >以下任何一项)之前立即初始化:

  • T 是一个类,并创建了 T 的一个实例。
  • T 是一个类,调用由 T 声明的静态方法。
  • 分配由 T 声明的静态字段。
  • 使用 T 声明的静态字段,并且该字段不是常量变量 (§4.12.4)。
  • T 是顶级类,并执行词法嵌套在 T 中的断言语句 (§14.10)。

在类类和包 java.lang.reflect 中调用某些反射方法也会导致类或接口初始化。在任何其他情况下,类或接口都不会初始化。

Doh,anovstrup,已经说过了:只要做一个名为.一定要记录好...不过,我个人在格式良好的代码的上下文中看不到任何用例。init


答案 2

可以使用以下代码强制初始化类:

//... Foo.class ...          //OLD CODE
... forceInit(Foo.class) ... //NEW CODE

/**
 * Forces the initialization of the class pertaining to 
 * the specified <tt>Class</tt> object. 
 * This method does nothing if the class is already
 * initialized prior to invocation.
 *
 * @param klass the class for which to force initialization
 * @return <tt>klass</tt>

 */
public static <T> Class<T> forceInit(Class<T> klass) {
    try {
        Class.forName(klass.getName(), true, klass.getClassLoader());
    } catch (ClassNotFoundException e) {
        throw new AssertionError(e);  // Can't happen
    }
    return klass;
}