Singleton构造函数中抛出异常如何处理?

03-04-10 dreamhead
    

我比较喜欢的Singleton方式是
class singleton {
private static singleton instance = new singleton();
private singleton() {
}

public static singleton getInstance() {
return instance;
}
}

OK,问题来了,如果这里的私有构造函数抛出异常该怎么处理?
这种写法肯定就是不行了,我尝试将instance该在static区内初始化,也就是这么写。
private static singleton instance;
static {
try {
instance = new singleton();
} catch (Exception e) {
instance = null;
}
}

static区中内容的执行是在这个加载的时候进行的,但是对于普通的一个应用,我通常只会直接调用getInstance,而并不去考虑这个类初始化时出了什么问题。换句话说,类初始化的异常并没有抛出来,我的程序无法对其进行跟踪。只有当我调用这个类的对象抛出NullPointerException时我才知道,这个类初始化出了问题,前提还是这个类是我写的,我对其运作很清楚。如果拿给别人用,就很难找到其中的问题了。

别告诉我把初始化代码拿出来专门做一个初始化的方法,我最初的代码就是从那里过来的。

百思不得其解,故来向大侠们请教。

    

banq
2003-04-11 12:56

可否这样:


....

public static singleton getInstance() throws Exception {
if (instance == null) throw new Exception
return instance;
}

...



当别人调用getInstance()时 只要就可以catch Exception了

张二狠
2003-04-11 16:06

产生静态实例那块用工厂,从工厂那里抛例外,结构比较清晰一些

wwlhp@jdon.com
2003-06-14 21:07

可以使用懒汉式单例

public class Singleton {
private static instance = null;

private Single() throws Exception {
// your code here
}

public static synchronized Singleton getInstance() throws Exception {
if( instance == null ) {
instance = new Singleton();
}
return instance;
}
}



}

wwlhp@jdon.com
2003-06-14 21:08

可以使用懒汉式单例

public class Singleton {
private static instance = null;

private Single() throws Exception {
// your code here
}

public static synchronized Singleton getInstance() throws Exception {
if( instance == null ) {
instance = new Singleton();
}
return instance;
}
}