Explication des Getters et Setters à Java

Les getters et setters sont utilisés pour protéger vos données, en particulier lors de la création de classes.

Pour chaque variable d'instance, une méthode getter renvoie sa valeur tandis qu'une méthode setter définit ou met à jour sa valeur. Compte tenu de cela, les getters et les setters sont également appelés accesseurs et mutateurs , respectivement.

Par convention, les getters commencent par le mot "get" et les setters par le mot "set", suivi d'un nom de variable. Dans les deux cas, la première lettre du nom de la variable est en majuscule:

public class Vehicle { private String color; // Getter public String getColor() { return color; } // Setter public void setColor(String c) { this.color = c; } }

La méthode getter renvoie la valeur de l'attribut. La méthode setter prend un paramètre et l'affecte à l'attribut.

Une fois le getter et le setter définis, nous l'utilisons dans notre main:

public static void main(String[] args) { Vehicle v1 = new Vehicle(); v1.setColor("Red"); System.out.println(v1.getColor()); } // Outputs "Red"

Les getters et les setters permettent de contrôler les valeurs. Vous pouvez valider la valeur donnée dans le setter avant de définir réellement la valeur.

Pourquoi utiliser des getters et des setters?

Les getters et les setters vous permettent de contrôler l'accès et la mise à jour des variables importantes dans votre code. Par exemple, considérez cette méthode setter:

public void setNumber(int number) { if (number  10) { throw new IllegalArgumentException(); } this.number = num; }

En utilisant la setNumberméthode, vous pouvez être sûr que la valeur de numberest toujours comprise entre 1 et 10. C'est bien mieux que de mettre à jour la numbervariable directement:

obj.number = 13;

Si vous mettez à jour numberdirectement, il est possible que vous provoquiez des effets secondaires involontaires ailleurs dans votre code. Ici, la mise numberà 13 viole la contrainte de 1 à 10 que nous voulons établir.

Créer numberune variable privée et utiliser la setNumberméthode empêcherait que cela se produise.

D'un autre côté, la seule façon de lire la valeur de numberest d'utiliser une méthode getter:

public int getNumber() { return this.number; }