Большая разница - то, что try...catch
будет глотать исключение, скрывая то, что ошибка произошла. try..finally
выполнит Ваш код очистки, и затем исключение будет продолжать идти, обрабатываться чем-то, что знает, что сделать с ним.
Не похоже, что есть место в подклассе где вы можете добавить ловушку для переключения класса без полного копирования реализации mapRow () для BeanPropertyRowMapper. Лучшим подходом может быть создание класса RowMapper, который делегирует соответствующий BeanPropertyRowMapper.
Например:
final RowMapper managerMapper = new BeanPropertyRowMapper(Manager.class);
final RowMapper employeeMapper = new BeanPropertyRowMapper(Employee.class);
final RowMapper contractorMapper = new BeanPropertyRowMapper(Contractor.class);
RowMapper rm = new RowMapper()
{
@Override
public Object mapRow(ResultSet rs, int rowNum)
throws SQLException
{
int employeeType = rs.getInt("type");
switch (employeeType)
{
case 1:
return managerMapper.mapRow(rs, rowNum);
case 2:
return employeeMapper.mapRow(rs, rowNum);
case 3:
return contractorMapper.mapRow(rs, rowNum);
default:
break;
}
}
};