我有以下代码,我懒得加载我的类的实例创建。
public class MyTest {
private static MyTest test = null;
private UniApp uniApp;
private MyTest(){
try{
uniApp = new UniApp("test","test123");
}
catch(Exception e){
e.printStackTrace();
logger.error("Exception " +e+ "occured while creating instance of uniApp");
}
}
public static MyTest getInstance(){
if (test == null){
synchronized(MyTest.class){
if (test == null){
test = new MyTest();
}
}
}
return test;
}
在构造函数中,我创建了一个UniApp实例,需要在自己的构造函数中传递userid,password。如果我说我传递了一个错误的userid,uniApp对象的密码,则不会创建uniApp。这就是我需要的 -
我在另一个类中调用getInstance方法 -
MyTest test=MyTest.getInstance();
在这里,如果发生uniApp创建失败,我想添加条件,做吧。我怎么做? 一般来说,如果我试图调用一个在类B中抛出A类异常的方法,并在B中放入一个条件 - 如果A类中的方法抛出异常,那就这样做。
我怎样才能做到这一点?如果我的问题令人困惑,请告诉我。我可以编辑它:)
答案 0 :(得分:2)
从私有构造函数中抛出异常就可以了(引用This SO question,或者做一些快速的Google搜索)。在您的情况下,您正在捕获从new UniApp()
抛出的异常并且不传递它 - 您可以非常轻松地将该异常从食物链传递到您的getInstance()
方法,然后传递给任何调用该单例的人。
例如,使用您的代码:
private MyTest() throws UniAppException { // Better if you declare _which_ exception UniApp throws!
// If you want your own code to log what happens, keep the try/catch but rethrow it
try{
uniApp = new UniApp("test","test123");
}
catch(UniAppException e) {
e.printStackTrace();
logger.error("Exception " +e+ "occured while creating instance of uniApp");
throw e;
}
}
public static MyTest getInstance() throws UniAppException {
if (test == null) {
synchronized(MyTest.class) {
if (test == null) {
test = new MyTest();
}
}
}
return test;
}
要创建“if”条件以测试getInstance()
方法是否有效,请使用try / catch块围绕您对getInstance()
的调用:
...
MyTest myTest;
try {
myTest = MyTest.getInstance();
// do stuff with an instantiated myTest
catch (UniAppException e) {
// do stuff to handle e when myTest will be null
}
...
由于您没有显示实际调用MyTest.getInstance()
,我无法告诉您除此之外还有什么可做。