Turma,
estou lendo o livro Java Efetivo do Joshua Bloch e não entendi um trecho:
Página 137 (versão em português - 2ª edição)
"... Esse código funciona, mas não é muito elegante. Ele não será compilado sem a instrução throw porque o final do método é tecnicamente alcançável, sem nunca ser alcançado [JLS, 14.2.1] ..."
Não entendi: "o final do método é tecnicamente alcançável, sem nunca ser alcançado".
Neste ponto, Joshua está tratando de um enum que possui o seguinte código:
public enum Operation {
PLUS, MINUS, TIMES, DIVIDE;
double apply (double x, double y) {
switch (this) {
case PLUS: return x + y;
case MINUS: return x - y;
case TIMES: return x * y;
case DIVIDE: return x / y;
}
throw new AssertionError ("Unknow op: " + this);
}
}
Procurei na Java Language Specification pela seção 14.2.1, mas não encontrei esta seção. Esta seção não existe. A seção 14.2 (http://docs.oracle.com/javase/specs/jls/se5.0/html/statements.html#14.2) contem apenas o seguinte:
14.2 Blocks
A block is a sequence of statements, local class declarations and local variable declaration statements within braces.
Block:
{ BlockStatementsopt }
BlockStatements:
BlockStatement
BlockStatements BlockStatement
BlockStatement:
LocalVariableDeclarationStatement
ClassDeclaration
Statement
A block is executed by executing each of the local variable declaration statements and other statements in order from first to last (left to right). If all of these block statements complete normally, then the block completes normally. If any of these block statements complete abruptly for any reason, then the block completes abruptly for the same reason.
Alguma dica?
Não sei se a tradução foi infeliz neste ponto, mas realmente não entendi.
Abraços,
Daniel Augusto