Por que lançar um tipo de exceção verificado é permitido neste caso?
Notei por acidente que issothrow
A instrução (extraída de algum código mais complexo) compila:
void foo() {
try {
} catch (Throwable t) {
throw t;
}
}
Por um momento breve, mas feliz, pensei que as exceções verificadas finalmente haviam decidido simplesmente morrer, mas ainda fica empolgado com isso:
void foo() {
try {
} catch (Throwable t) {
Throwable t1 = t;
throw t1;
}
}
otry
o bloco não precisa estar vazio; parece que pode ter código, desde que esse código não gere uma exceção verificada. Isso parece razoável, mas minha pergunta é: qual regra na especificação de linguagem descreve esse comportamento? Tão longe quanto eu consigo ver,§14.18 A declaração throw proíbe explicitamente, porque o tipo det
A expressão é uma exceção verificada e não é capturada ou declarada lançada. (?)