257 votes

Devrais j’initialisation variable au constructeur ou à l’extérieur constructeur

Lorsque j’utilise Java basé sur ma connaissance de C++, j’aime initialiser la variable à l’aide de la manière suivante.

Après un certain temps, j’ai changer l’habitude de

Je suis tombé sur d’autres code source, certains utilisent la 1ère convention, d’autres utilisent 2ème convention.

Puis-je savoir quelle convention vous faire recommander tous ? et pourquoi ?

250voto

sleske Points 29978

Je trouve le deuxième style (déclaration + initialisation d'un seul coup) de qualité supérieure. Raisons:

  • Il en fait clairement un coup d'œil la façon dont la variable est initialisée. Généralement, lors de la lecture d'un programme et venir à travers une variable, vous devez d'abord aller à sa déclaration (souvent automatique en Ide). Avec style 2, vous voyez la valeur par défaut. Avec style 1, vous avez besoin de regarder le constructeur.
  • Si vous avez plus d'un constructeur, vous n'avez pas à répéter les initialisations (et vous ne pouvez pas les oublier).

Bien sûr, si la valeur d'initialisation est différente dans les différents constructeurs (ou même calculé dans le constructeur), vous devez le faire dans le constructeur.

31voto

Joseph Cozad Points 31

J'ai la pratique (l'habitude) de près de toujours initialiser dans le constructeur pour deux raisons, à mon avis, il ajoute à readablitiy (plus propre), et de deux, il est plus logique de contrôle dans le constructeur que dans une seule ligne. Même si, initialement, la variable d'instance n'exige pas la logique, de l'avoir dans le constructeur donne plus de flexibilité pour ajouter de la logique dans l'avenir si nécessaire.

Comme les préoccupations mentionnées ci-dessus à propos de plusieurs constructeurs, c'est facilement résolu en ayant un no-arg constructeur qui initialise toutes les variables d'instance qui sont initilized la même pour tous les constructeurs et puis chaque constructeur appelle ce() à la première ligne. Cela résout votre reduncancy questions.

25voto

Colin Hebert Points 40084

Les deux sont les mêmes.

J’ai tendance à utiliser l’autre pour éviter un constructeur compliqué (ou un inutile), aussi je ne vraiment considère cela comme une initialisation (même si c’est une initialisation), mais plus comme donnant une valeur par défaut.

Par exemple dans votre deuxième extrait, vous pouvez supprimer le constructeur et avoir un code plus clair.

6voto

Josmas Points 131

Le seul problème que je vois avec la première méthode est si vous prévoyez d’ajouter plus de constructeurs. Puis vous répéterons code et maintenabilité souffrirait.

3voto

Steve Emmerson Points 4161

Une chose, peu importe comment vous l’initialisez le champ, utiliser de le `` qualificatif, si possible, assurera la visibilité de la valeur du champ dans un environnement multithread.

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