Sobes.tech
Junior

Comment laimmutabilité est-elle assurée en Java?

sobes.tech IA

Réponse de l'IA

L'immuabilité en Java est assurée par les moyens suivants :

  1. Déclarer la classe comme final : La classe ne peut pas être héritée, ce qui empêche la création de sous-classes mutables.

  2. Déclarer tous les champs comme final : La valeur du champ ne peut être assignée qu'une seule fois (lors de l'initialisation ou dans le constructeur) et ne peut pas être modifiée après la création de l'objet.

  3. Privacité des champs : Les champs doivent être privés (private) pour empêcher l'accès direct et la modification des valeurs depuis l'extérieur de la classe.

  4. Absence de setters ou de méthodes modifiant l'état de l'objet : La classe ne doit pas fournir de méthodes publiques qui pourraient modifier les valeurs des champs après leur création.

  5. Gestion correcte des champs mutables : Si la classe contient des références à des objets mutables (par exemple, List ou une classe mutable propre), il est nécessaire :

    • de créer des copies lors de l'initialisation (dans le constructeur),
    • de retourner des copies dans les getters pour éviter de modifier les états internes de l'objet depuis l'extérieur.
public final class ImmutableExample { // classe finale

    private final String name; // champ final et privé

    private final List<String> items; // champ final et privé

    public ImmutableExample(String name, List<String> items) {
        this.name = name;
        // Créer une copie protégée de la liste mutable
        this.items = new ArrayList<>(items);
    }

    public String getName() {
        return name;
    }

    public List<String> getItems() {
        // Retourner une copie protégée de la liste mutable
        return Collections.unmodifiableList(new ArrayList<>(items));
    }

    // Absence de setters ou de méthodes modifiant l'état
}

Exemples de classes immuables intégrées en Java : String, classes wrapper des types primitifs (Integer, Long, etc.), BigInteger, BigDecimal.