Perché bar = (Object) foo oggetto; è necessario essere in un blocco per la compilazione del codice?
Perché è inutile dichiarare una variabile quando questa è l'unica dichiarazione nel blocco. La dichiarazione è priva di significato, in quanto non sarà possibile fare riferimento alla variabile in alcun codice successivo. (Il campo di applicazione della variabile sarebbe solo la dichiarazione.)
In sostanza, il compilatore vi impedisce di fare qualcosa di inutile.
In termini di specifiche, questo è la produzione si sta cercando di utilizzare (section 14.9 of the JLS):
IfThenStatement:
if (Expression) Statement
Ora la produzione Dichiarazione è definito da section 14.5.
Statement:
StatementWithoutTrailingSubstatement
LabeledStatement
IfThenStatement
IfThenElseStatement
WhileStatement
ForStatement
StatementWithoutTrailingSubstatement:
Block
EmptyStatement
ExpressionStatement
AssertStatement
SwitchStatement
DoStatement
BreakStatement
ContinueStatement
ReturnStatement
SynchronizedStatement
ThrowStatement
TryStatement
StatementNoShortIf:
StatementWithoutTrailingSubstatement
LabeledStatementNoShortIf
IfThenElseStatementNoShortIf
WhileStatementNoShortIf
ForStatementNoShortIf
Nota non c'è LocalVariableDeclarationStatement lì. Il solo si verifica nella produzione BlockStatement, definita in section 14.4 di JLS.
fonte
2012-11-30 14:48:01
Non possiamo essere più precisi;) – Mik378