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.