如何强制初始化类?[已关闭]
2022-08-31 20:55:58
最好的和最干净的方法是什么?具体来说,我需要静态初始值设定项块中的一些代码才能在该类中运行,但我想使它尽可能干净。
最好的和最干净的方法是什么?具体来说,我需要静态初始值设定项块中的一些代码才能在该类中运行,但我想使它尽可能干净。
正在加载 != 初始化。
您希望初始化您的类(这是执行静态块时,以及其他事项)。
Java语言规范的摘录说:
类或接口类型 T 将在第一次出现 >以下任何一项)之前立即初始化:
- T 是一个类,并创建了 T 的一个实例。
- T 是一个类,调用由 T 声明的静态方法。
- 分配由 T 声明的静态字段。
- 使用 T 声明的静态字段,并且该字段不是常量变量 (§4.12.4)。
- T 是顶级类,并执行词法嵌套在 T 中的断言语句 (§14.10)。
在类类和包 java.lang.reflect 中调用某些反射方法也会导致类或接口初始化。在任何其他情况下,类或接口都不会初始化。
Doh,anovstrup,已经说过了:只要做一个名为.一定要记录好...不过,我个人在格式良好的代码的上下文中看不到任何用例。init
可以使用以下代码强制初始化类:
//... 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;
}