在一个方法中进行多次尝试并像这样构造代码是否被认为是不好的做法?

public void whatever() {
   try {
     methodThatMayThrowIOException();
   } catch(IOException io) {
     // do something with exception here
   }

   // do more stuff here that won't throw exceptions

   try {
     methodThatMayThrowCustomException();
   } catch(CustomException ce) {
     // do something with custom exception here
   }
}

最佳答案

您的代码读起来像是这样做的,因为您要执行第1部分(并解决,必要时捕获IOException),执行no-exceptions部分,然后执行methodThatMayThrowCustomException您的代码实际上不能以任何其他方式编写,并且保留相同的功能。 有点夸张,但是任何其他版本在表面上都是不同的。

这是而不是相同:

public void whatever {
   try {
     methodThatMayThrowIOException();
     // do more stuff here that won't throw exceptions
     methodThatMayThrowCustomException();
   } catch(IOException io) {
     // do something with io exception here
   } catch(CustomException ce) {
     // do something with custom exception here
   }
}

并且如果抛出任何异常,它将执行的方式是完全不同的。如果您需要从第1部分中顺序恢复,则无论如何都要按第2部分进行操作,然后继续进行第3部分,您实际上无法以其他任何方式编写代码。

拥有两个catch块并没有错,尽管将导致IOException的异常与引发CustomException的异常混合可能会引起关注的混合,使您的代码难以理解。但是,这不仅是有效的,而且是执行您所做的唯一方法。

08-25 02:14