76 votes

Java, Ce qui ne accolades veux dire par eux-mêmes?

J'ai peu de code Java qui utilise des accolades en deux façons

//curly braces attached to an if statement:
if(node.getId() != null)
{
    node.getId().apply(this);
}

//curly braces by themselves:
{
    List<PExp> copy = new ArrayList<PExp>(node.getArgs());
    for(PExp e : copy)
    {
        e.apply(this);
    }
}
outAMethodExp(node);

Ce n'ceux autonome des accolades après la première instruction if veux dire?

118voto

matt b Points 73770

Le seul but de la plus-accolades est de fournir à portée de limite. L' List<PExp> copy ne peuvent exister à l'intérieur de ces accolades, et n'aura pas portée à l'extérieur d'eux.

Si c'est du code généré, je suppose que le générateur de code fait pour insérer du code (par exemple) sans avoir à vous soucier de combien de fois il a inséré un List<PExp> copy et sans avoir à se soucier éventuellement renommer les variables si ce fragment est inséré dans la même méthode, plus d'une fois.

26voto

Dov Wasserman Points 1538

Je seconde ce que matt b a écrit, et je vais ajouter qu'une autre utilisation que j'ai vu de anonyme accolades est de déclarer un constructeur implicite dans les classes anonymes. Par exemple:

  List<String> names = new ArrayList<String>() {
    // I want to initialize this ArrayList instace in-line,
    // but I can't define a constructor for an anonymous class:
      {
        add("Adam");
        add("Eve");
      }

  };

Certains tests unitaires cadres ont pris cette syntaxe à un autre niveau, qui ne permet pas certains de la nappe de choses qui ont l'air totalement uncompilable de travail. Depuis qu'ils regarder inconnu, je ne suis pas un grand fan moi-même, mais il est utile d'au moins reconnaître ce qui se passe si vous courir à travers cette utilisation.

7voto

Eli Points 14599

Je suis d'accord avec le champ d'application limite de réponse, mais d'ajouter une chose.

Parfois, vous voyez une construction comme cela dans le code de gens qui aiment à la fois les sections de leur code et les éditeurs qui va se coucher accolades automatiquement. Ils l'utilisent à la fois leur code en sections logiques qui ne s'inscrivent pas dans une fonction, classe, boucle, etc. que serait généralement être plié vers le haut.

4voto

Patrick Points 20392

J'avais suppose que quelqu'un a oublié un else.

Il y a rarement une bonne raison de se soucier de créer d'autres domaines de bloc. Dans ce domaine, et la plupart des cas, il est beaucoup plus probable que quelqu'un les ait oubliés pour leur type de contrôle qu'il ne l'est qu'ils ont fait quelque chose d'intelligent.

2voto

Paweł Hajdan Points 8004

Ils font un à l'intérieur de la portée. Variable déclarée à l'intérieur de ces accolades n'est pas visible à l'extérieur. Cela vaut également pour les C/C++.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X