Contenu du cours
Java Avancé
Java Avancé
Getter et Setter
La meilleure façon de contourner le modificateur d'accès private
Tous les programmeurs Java utilisent des constructions appelées getters et setters.
Les getters et setters sont des méthodes qui suivent un schéma spécifique. Elles sont utilisées pour contourner le modificateur d'accès private
et manipuler efficacement les champs d'une autre classe.
À quoi servent les getters et setters ?
En termes simples, le setter permet d'attribuer une valeur à un champ spécifique protégé par le modificateur d'accès private, tandis que le getter permet de récupérer la valeur d'un champ protégé par le modificateur d'accès private.
La syntaxe d'un getter et d'un setter :
Main.java
// getter public fieldType getFieldName() { return field; } // setter public void setFieldName(fieldType field) { this.field = field; }
Comme vous pouvez le voir dans le code ci-dessus, nous utilisons la convention de nommage pour les méthodes getFieldName()
et setFieldName()
. Ainsi, si nous avons un champ private String name
et que nous créons un getter et un setter nommés respectivement getName()
et setName()
. Il convient également de noter que le getter retourne une valeur du même type que le champ name
, tandis que le setter prend un paramètre du même type que le champ name
.
Cela nous permet d'accéder aux champs protégés par le modificateur d'accès private
.
Examinons un exemple d'accès à un champ privé de la classe Person
dans la classe main
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); System.out.println(bob.getName()); } } class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Comme vous pouvez le constater, nous utilisons le setter pour attribuer une valeur au champ name
, puis nous utilisons le getter pour afficher la valeur du champ name
à l'écran. Portez attention à la syntaxe du getter et du setter, ainsi qu'au fait que le champ name
dans la classe Person
est protégé par le modificateur d'accès private
.
Constructeur vs Getter/Setter
Lequel est préférable d'utiliser : l'initialisation via un constructeur + la surcharge de la méthode toString()
, ou l'utilisation des getters et setters ?
Il est clairement préférable d'utiliser les getters et setters pour accéder aux champs protégés par le modificateur d'accès private
. Cela offre une plus grande flexibilité dans le code et améliore sa lisibilité. Lorsque vous voyez l'utilisation de la méthode getName()
dans le code, vous comprenez immédiatement que cette méthode récupère le champ nommé name
. Il en va de même lorsque vous voyez l'utilisation de la méthode setName()
, vous comprenez immédiatement que vous attribuez une valeur spécifique au champ pour l'objet de la classe dans laquelle elle est utilisée. Si d'autres personnes lisent votre code, elles apprécieront la présence de getters et setters.
Il convient également de noter que chaque champ nécessite son propre getter et setter. Si une classe possède deux champs protégés par le modificateur d'accès private
, la classe doit avoir un getter pour chaque champ, soit deux getters et deux setters.
Examinons un exemple où nous ajoutons un champ age
à la classe Person
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); bob.setAge(27); System.out.println("Person's name: " + bob.getName() + ", Person's age: " + bob.getAge()); } } class Person { private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Comme vous pouvez le constater, nous avons créé un getter et un setter pour chaque champ de la classe Person
. Dans la méthode main
, nous avons initialisé les champs à l'aide du setter et affiché leurs valeurs à l'écran à l'aide du getter. L'utilisation de ces méthodes est très pratique, et vous les utiliserez fréquemment à l'avenir.
1. Quel est l'objectif d'utiliser des getters et des setters ?
2. Quelle est la syntaxe d'une méthode getter en Java ?
3. Quelle est la syntaxe d'une méthode setter en Java ?
Merci pour vos commentaires !