我有一个带有内部初始化代码的静态初始化程序的类A,它将把私有的静态工厂方法引用发送给工厂选择器。如何既不在A的其他位置运行静态初始化程序呢?没有try-catch块,还有更优雅的解决方法吗?
我试图创建并运行空的静态方法,它可以工作,但是那样做会不正确。
public class A implements Factoriable
{
private A(/*...*/) {/*...*/}
/*...*/
static
{
Factories.registerFactory(A.class, A::create);
}
private static A create(Q source)
{ /*...*/ }
}
现在我像这样运行初始化程序:
final Class[] classes = new Class[]{A.class};
final ClassLoader loader = this.getClassLoader();
for(Class cl: classes)
{
try
{
Class.forName(cl.getName(), true, loader);
} catch (ClassNotFoundException ex)
{
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}