12
votes

L'initialisation statique est-elle une bonne pratique de programmation?

En Java, nous utilisons le bloc d'initialisation statique:

private static final ApiKey API_KEY;

static {
    API_KEY = new ApiKey();
}
  • Est-ce une bonne pratique de programmation? LI>
  • Où devrions-nous utiliser ce modèle? LI> ul>

    Merci d'avance. p> p>


2 commentaires

Je vais commenter car il n'y a pas de réponse "noire ou blanche" à votre question. Personnellement, je ne trouve pas l'accesseur statique un bon ami de programmeurs. L'injection de dépendance est une très belle alternative qui aide également beaucoup lorsqu'il s'agit de tester.


J'ai vu un code dans lequel de nouveaux threads sont démarrés dans le bloc statique. :) c'était très mauvais.


3 Réponses :


9
votes

Dans une certaine mesure, c'est une question de goût. Pour moi, ça va aussi longtemps que:

  • Vous gardez la finale sur le terrain, comme vous l'avez fait LI>
  • Vous vous assurez que l'objet référencé est immuable et thread-coffre-fort li> ul>

    Les statiques ont tendance à écrire de bons tests plus difficiles. Si vous ne trouvez jamais que vous voulez commencer à modifier l'état statique, vous devez probablement regarder la conception à nouveau. P>

    envisager de regarder Google Guice et son très sympa Mise en œuvre singleton . P>

    Bien sûr, si votre application est une expérience de 10 lignes à une seule classe, cela compte beaucoup moins. P>

    Notez que dans votre exemple, vous pouvez simplifier: P >

    private static final ApiKey API_KEY = new ApiKey();
    


0 commentaires

5
votes

Vous pouvez éviter d'utiliser un bloc d'initialisateur statique complètement à l'aide du code suivant: xxx

ou xxx

si la création de la clé API nécessite plus qu'un simple appel de constructeur. Cela rend le code plus lisible, imho. Mais cela n'a pas beaucoup d'importance.

L'initialiseur statique est utile lorsque deux champs statiques dépendent du même code d'initialisation: xxx

mais même alors, A et B ont peut-être pu être refacturés dans un seul objet, qui serait créé dans une seule méthode.


0 commentaires

3
votes

J'aime utiliser Enums dans la mesure du possible.

au lieu de xxx

J'écrirais xxx


0 commentaires