Dupliquer possible:
Blocs de code anonymes en JavaJe viens de tomber sur ce qui suit.
if ( test ) { { // statements 1 } { // statements 2 } }
C'est la première fois que je vois ça. Comment ça marche?
Réponses
Trop de publicités?Il s'agit simplement d'écrire deux blocs de code différents afin de masquer les variables locales.
De la réponse à la question " Blocs de code anonyme en Java ":
Les blocs limitent la portée des variables.
public void foo() { { int i = 10; } System.out.println(i); // Won't compile. }
En pratique, cependant, si vous utilisez un tel bloc de code, c'est probablement le signe que vous souhaitez refactoriser cette méthode en la bloquant.
Deux exemples de ce qui peut être (un peu) utile pour les tests unitaires, et dans les Interfaces graphiques, qui impliquent souvent répétitives code:
Il est utile dans la GUI de l'immeuble, où il est incroyablement facile à couper-coller les lignes relatives à un composant et d'oublier de les mettre à jour pour le nouveau composant, conduisant à un dur-à-trouver des bugs, par exemple:
JButton button1 = new JButton("OK");
button1.setEnabled(false);
button1.setAlignmentX(-1);
JButton button2 = new JButton("Apply");
button1.setEnabled(false);
button1.setAlignmentX(-1);
Oups, j'ai juste configuré button1
deux fois. Si vous placez chaque bouton dans son propre bloc, alors cette erreur est capté par le compilateur. Encore une fois, vous pourriez créer chaque bouton dans une autre méthode, mais qui peut le rendre difficile à voir ce qui se passe (surtout étant donné le manque de mots-clés les paramètres en Java):
JButton button_ok = makeButton("OK", false, -1);
JButton button_apply = makeButton("Apply", true, 1);
// what exactly is being set here?
...
// much later:
private static JButton makeButton(String name, boolean enabled,
int alignment)
{
JButton button = new JButton(name);
button.setEnabled(enabled);
button.setAlignmentX(alignment);
return button;
}
...et vous pouvez vous retrouver avec de nombreuses méthodes, chaque manipulation de différentes variations de paramètres, et chacun n'étant utilisé que peut-être deux fois.
{}
introduit une portée et les variables déclarées dans la portée n'existent que pour cette portée. Par exemple:
if ( test ) {
int i = 0;
float i = 0;
}
échouerait lors de la compilation car i
a été déclaré deux fois dans le même périmètre.
if ( test ) {
{
int i = 0;
}
{
float i = 0;
}
}
compilerait amende puisque i
n’a pas été déclaré deux fois dans le même périmètre.