image/svg+xml $ $ ing$ ing$ ces$ ces$ Res Res ea ea Res->ea ou ou Res->ou r r ea->r ch ch ea->ch r->ces$ r->ch ch->$ ch->ing$ T T T->ea ou->r

Un antipattern est une attitude que l'on doit absolument éviter lorsque l'on écrit du code-source.
Il s'agit donc de mauvaises pratiques à éviter.
En anglais, on parle aussi de code smell, i.e. d'indices au niveau du code qui indiquent un problème structurel plus important.

L'abus du static en Java

Evitons static

Quelques usages légitimes de static

Expression de constantes

public class MathElements {
    /** Une constante immutable */
    public static final double APPROX_PI = 3.14;

    /**
     * Utiliser final avec un type mutable apporte un faux sentiment de sécurité
     * car on peut le modifier (seule la référence est finale)
     */
    public static final int[] FIBO_SEQUENCE_START = new int[]{1, 1, 2, 3, 5, 8, 11};

    /** Avec List.of, on obtient une liste immutable,
      * toute tentative de changement occasionnera une exception
      */
    public static final List<Integer> FIBO_SEQUENCE_START_2 = List.of(1, 1, 2, 3, 5, 8, 11);
}

Champs mutable utiles pour la classe

Quelques exemples de cas où un champ statique mutable peut être utile :

Cas des classes contenant que des membres statiques

Deux possibilités :

Certains langages orientés objet n'utilisent pas le concept de membres static :

Objet divin et code ravioli

Paramètres trop nombreux

Redéfinition de méthodes

Duplication de code

Valeurs en dur dans le code

Maintien de données redondantes

Mauvaise utilisation des exceptions

Confiance aveugle en les entrées