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 setNumber
méthode, vous pouvez être sûr que la valeur de number
est toujours comprise entre 1 et 10. C'est bien mieux que de mettre à jour la number
variable directement:
obj.number = 13;
Si vous mettez à jour number
directement, 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 number
une variable privée et utiliser la setNumber
méthode empêcherait que cela se produise.
D'un autre côté, la seule façon de lire la valeur de number
est d'utiliser une méthode getter:
public int getNumber() { return this.number; }