Java - Objets mutables et immuables

Java - Objets mutables et immuables

Cet article vous montre la différence entre les objets mutables et immuables en Java

1. Mutable object - Vous pouvez modifier les états et les champs après la création de l'objet. Par exemple:StringBuilder,java.util.Date et etc.

2. Immutable object - Vous ne pouvez rien changer après la création de l'objet. Par exemple:String, objets primitifs encadrés commeInteger,Long et etc.

1. Exemple Java Mutable

Normalement, il fournit une méthode pour modifier la valeur du champ et l'objet peut être étendu.

MutableExample.java

package com.example;

public class MutableExample {

    private String name;

    MutableClass(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    // this setter can modify the name
    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) {

        MutableExample obj = new MutableExample("example");
        System.out.println(obj.getName());

        // update the name, this object is mutable
        obj.setName("new example");
        System.out.println(obj.getName());

    }
}

Sortie

example
new example

2. Exemple immuable Java

Pour créer un objet immuable, rendez la classe définitive et ne fournissez aucune méthode pour modifier les champs.

ImmutableExample.java

package com.example;

// make this class final, no one can extend this class
public final class ImmutableExample {

    private String name;

    ImmutableExample (String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    //no setter

    public static void main(String[] args) {

        ImmutableExample obj = new ImmutableExample("example");
        System.out.println(obj.getName());

        // there is no way to update the name after the object is created.
        // obj.setName("new example");
        // System.out.println(obj.getName());

    }
}

Sortie

example

Note
L'objet immuable est simple, thread-safe (pas besoin de synchronisation), moins sujet aux erreurs et plus sécurisé. Si possible, rendez tous les objets immuables.

P.S Please refer to the Effective Java Book – Item 15: Minimize mutability.