Почему throw outerE;
генерирует ошибку компиляции? Я знаю, что throw e;
не должен генерировать ошибку компилятора из-за точной функции ретролина.
Они представляют собой один и тот же объект Exception
, но один из них ограничен только внутри блока catch
, а другой - вне блока try-catch.
Не должно ли ни одна из них генерировать ошибку компилятора? Или, по крайней мере, оба ведут себя одинаково?
static void preciseRethrowTest()
{
Exception outerE;
try
{
}
catch (Exception e)
{
outerE = e;
// Compilation error here. Unhandled exception type Exception
// throw outerE;
throw e; // No compiler error
}
}
Я использую Java 1.8.0_51. (Точный ретрон введен в Java 7)