Ваш код читается так, как он делает, потому что вы хотите выполнить часть 1 (и решить, перехватывая IOException
, если необходимо), выполнить часть без исключений, а затем выполнить 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, может привести к смешению проблем, что усложнит понимание вашего кода. Но на самом деле это не просто правильно, это единственный способ сделать то, что ты делаешь.