2015-09-22 7 views
2

В некотором устаревшем коде есть несколько мест для возврата значений. Я хотел бы зарегистрировать возвращаемое значение. Можно ли получить возвращаемое значение в заявлении finally? неВ любом случае, чтобы получить возвращаемое значение в заявлении finally?

Например:

try { 
    if (v == 1) { 
     return 3; 
    } else if (v == 3) { 
     return x + 2; 
    } 
} finally { 
    // I need to know the return value here, either 3 or x + 2. 
} 
+0

Почему бы не зарегистрировать его до того, как вы вернетесь в 'if' или' else if'statement? Как только вы вернетесь, он выйдет из этого метода. – jgabb

+0

нет. что вы можете сделать, это повлиять на переменную, использовать ее в конце, а затем вернуть ее. – njzk2

+0

Какое значение вы бы хотели, чтобы блок finally увидел, что 'v' не является ни 1, ни 3? – Andreas

ответ

7

Как только return вызывается, все остальное в этой функции пропускается. Если вы хотите знать, что это за значение, вам лучше сэкономить 3 или x+2 в переменной за пределами области вашего try.

int ret = -1; 
try { 
    if (v == 1) { 
     ret = 3; 
    } 
    else if (v == 3) { 
     ret = x + 2; 
    } 
} 
finally { 
    System.out.println("The value of ret is " + ret); 
} 
return ret; 
+0

Возможно, вы захотите переместить 'return' вне блока' finally'. – Andreas

+0

@ Andreas, хороший момент. Это то, что я получаю за то, что не соглашаюсь с моими соглашениями Java: P –

1

Нет; блок finally не имеет контекста в предыдущее возвращаемое значение.

Лучше всего хранить значение в переменной, регистрировать переменную и возвращать переменную позже.

int result = 0; 
if (v == 1) { 
    result = 3; 
    log.debug(result); 
    return result; 
} else if (v == 3) { 
    result = x + 2; 
    log.debug(result); 
    return result; 
}