什么是设计一个可能抛出异常的单例类的最佳方式?单身人士和例外
在这里,我有一个单身人士(使用Bill Pugh的方法,记录在Wiki for Singleton中)。
private static class SingletonObjectFactoryHolder{
//1
private static final ObjectFactory INSTANCE = new ObjectFactory();
}
private ObjectFactory() throws Exception{
//2
//create the factory
}
public static ObjectFactory getInstance(){
//3
return SingletonObjectFactoryHolder.INSTANCE;
}
如果在2引发异常,我想将它传播给调用者。 但是,我不能从第1行抛出异常。
所以,如果单身人士对象没有被正确创建,是我唯一的选择返回空对象吗?
感谢
P.S我不知道这辛格尔顿可以打破如果通过不同类加载器加载,或者加载本能,但它不够好我的目的。
// UPDATE
我很好奇,我不能重新安排如下我的设计抛出异常?另外,我不需要任何同步(类加载器保证静态内部类只会在调用getInstance()时才加载一次)。因此,线程安全和懒惰实例化?
private static class SingletonObjectFactoryHolder{
//1
public static ObjectFactory getInstance() throws Exception{
return new ObjectFactory();
}
}
private ObjectFactory() throws Exception{
//2
//create the factory
}
public static ObjectFactory getInstance(){
//3
return SingletonObjectFactoryHolder.getInstance();
}
再次感谢。
BalusC的答案是正确的,但也请参阅http://www.yoda.arachsys.com/csharp/singleton.html – finnw 2010-02-18 00:31:05
谢谢。尽管抛出错误确实感觉有点不寻常。 :) – CaptainHastings 2010-02-18 16:41:20
@finnw更新版本的链接:http://csharpindepth.com/Articles/General/Singleton.aspx – 2012-04-25 21:13:35