Причина, по которой это может показаться бессмысленной (бросать и ловить одним и тем же методом), заключается в том, что это будет сценарий использования исключений для управления потоком. Если у вас уже есть достаточно данных для определения условия, в которое должно быть сгенерировано исключение, вы можете использовать эту информацию для использования условия вместо этого.
См. Ниже:
1) Бросать и ловить исключение в том же методе ( неправильно )
public void method() {
try {
workA...
workA...
workA...
workA...
if( conditionIvalid() && notEnoughWhatever() && isWrongMoment() ) {
throw new IllegalStateException("No the rigth time" );
}
workB...
workB...
workB...
workB...
} catch( IllegalStateException iee ) {
System.out.println( "Skiped workB...");
}
workC....
workC....
workC....
workC....
}
В этом сценарии выбрасывание исключений используется для пропуска раздела «workB».
Это было бы лучше сделать так:
2) Использование условия для управления потоком ( вправо )
public void method() {
workA...
workA...
workA...
workA...
if( !(conditionIvalid() && notEnoughWhatever() && isWrongMoment() ) ) {
//throw new IllegalStateException("No the rigth time" );
workB...
workB...
workB...
workB...
}
workC....
workC....
workC....
workC....
}
А затем вы можете изменить условие:
if( !(conditionIvalid() && notEnoughWhatever() && isWrongMoment() ) ) {
для
if( canProceedWithWorkB() ) {
реализовано как:
boolean canProceedWithWorkB() {
return !(conditionIvalid() && notEnoughWhatever() && isWrongMoment() );
}