问题描述
|
考虑两个案例case1和case2以及两个方法method1和method2。说方法1解决案例1,方法2解决案例2。现在,我有一个可能以case1或case2结尾的程序。在我的代码中,无论发生什么情况,我都调用method1。但是,如果出现case2,则method1会给出nullpointerexception。
我想要的是以下内容:我的代码应首先调用method1,如果发生异常,则将调用method2。我该怎么办?由于我没有有关试捕的信息,因此我确实需要一些帮助!
解决方法
您可以这样做:
try {
method1();
}
catch ( Exception e ) {
method2();
}
也就是说,通常仅在特殊情况下才依赖异常会更好。对于正常的控制流程,可以使用if:
if ( isCase2() ) {
method2();
}
else {
method1();
}
,捕获NullPointerException
是一个糟糕的实践-您可能没有捕获到要捕获的特定异常。您有两种选择:
1)抛出自己的异常并在以后捕获:
public void method1(Case caze) throws MyException {
if (case.getType() == CaseType.CaseOne) {
// processing
} else {
throw new MyException(\"Wrong case type\");
}
}
和客户端代码:
try {
method1(caze);
} catch (MyException e) {
// log the excpetion
method2(caze);
}
2)返回一个布尔值标志,指示处理已成功完成。
请记住,在您的情况下,分析值总是比使用try-catch机制更好。我会为您建议第二种。