Eclipse предложил исправление для предупреждения, что блок finally не завершается нормально

Я знаю, что возврат в блок finally приведет к нежелательным результатам, таким как потеря неперехваченного исключения. Но то, что я пытаюсь понять здесь, - это предложенное Eclipse исправление для предупреждения "finally block does not complete normally".

Рассмотрим этот фрагмент кода:

    catch (SQLException se) 
    {
        System.out.println("Exception occured in the database");
        System.out.println("Exception message: "+ se.getMessage());
        System.out.println("Database error code: "+ se.getErrorCode());
        se.printStackTrace();
    }
    finally
    {
        // Clean up
        if(callStmt != null)
        {
            try
            {
                callStmt.close();
            } 
            catch (SQLException se2) 
            {
                se2.printStackTrace();
            }
        }
        
        if(conn != null)
        {
            try
            {
                conn.close();
            } 
            catch (SQLException se2) 
            {
                se2.printStackTrace();
            }
        }
        
        return newEmpSalary;
    }
}

Для приведенного выше кода Eclipse Luna выдается предупреждение "finally block does not complete normally" , для которого предлагается следующее исправление:

введите здесь описание изображения

Применение вышеуказанного исправления по-прежнему не устраняет предупреждение. Я знаю, что мне просто нужно удалить оператор возврата, чтобы избавиться от него.

Но мне любопытно узнать, почему Eclipse предлагает исправление "Change modifiers to final where possible" в этом случае.


person Chiseled    schedule 19.11.2014    source источник
comment
Понятия не имею, почему он говорит, что... очевидное решение - переместить оператор return из блока finally.   -  person Powerlord    schedule 19.11.2014


Ответы (1)


Eclipse не всегда может найти выход из ошибки, поэтому он предлагает другие вещи, которые могут помочь или привести к другой ошибке, которую он знает, как исправить.

Перемещение return newEmpSalary; из блока finally должно устранить ошибку.

person dkatzel    schedule 19.11.2014