假设我有方法a()和方法b(),这两个方法都可能抛出异常。在我的程序中,有一种情况是我必须至少调用其中的一个;我调用哪一个并不重要。但是,如果其中一个抛出异常,我必须调用另一个。如果它们都抛出异常,我就不需要做任何事情了。
我在考虑做这样的事情:
try {
a();
catch (Exception e) {
try {
b();
catch (Exception e) {
}
}但我认为如果要调用两个以上的方法,这将是不切实际的。所以我想知道有没有更优雅或者更好的方式来做我想做的事情。
发布于 2012-10-29 07:15:24
你可以的
abc:
{
try
{
a();
break abc;
}
catch(Exception e){}
try
{
b();
break abc;
}
catch(Exception e){}
try
{
c();
break abc;
}
catch(Exception e){}
}如果链条更长,可能会更好
for(int i=0; i<4; i++)
{
try
{
switch(i)
{
case 0: a(); break;
case 1: b(); break;
case 2: c(); break;
case 3: d(); break;
}
}
catch(Exception e){} // next
}发布于 2012-10-29 07:15:43
您可以在每次成功后返回,这样在第一次成功之后,就会命中一个返回。
public void uponSuccessStop() {
try {
a();
return;
} catch (Exception e) {}
try {
b();
return;
} catch (Exception e) {}
try {
c();
return;
} catch (Exception e) {}
}另一种选择是抛出异常,并使用短路布尔逻辑:
public boolean tryA() {
try {
a();
return true;
} catch (Exception e) {
return false;
}
}
// repeat for B and C
public void uponSuccessStop() {
boolean succeeded = tryA() || tryB() || tryC();
}发布于 2012-10-29 07:16:41
在这种概括性的级别上讨论实际的选项是困难的,但您可以这样做:
boolean succeeded = false;
try {
a();
succeeded = true;
} catch (Exception e) {
// intentional ...
}
if (not succeeded) {
try {
b();
catch (Exception e) {
...
}
}..。以及使用条件句(或break或return)来避免嵌套的所有其他类型的安排。
但他们是否更“优雅”..。或者更具可读性。将高度依赖于上下文。也依赖于阅读器。(作为一名经验丰富的Java程序员,理解嵌套异常并不困难。根据我的经验,旨在避免嵌套的人工构造可能会导致代码更难阅读/理解。)
我希望你不会真的去抓Exception ..。因为如果是这样的话,这是一个比try /catch嵌套更糟糕的问题!
https://stackoverflow.com/questions/13113966
复制相似问题