Méthodes Getter et Setter
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 11 sur 87.
Les getters et les setters sont des méthodes qui fournissent un accès contrôlé aux champs privés. Un getter récupère la valeur d'un champ, tandis qu'un setter la modifie.
La convention de nommage suit un modèle standard : le préfixe get ou set suivi du nom du champ avec sa première lettre en majuscule.
public class Product {
private String name;
private double price;
// Getter pour name
public String getName() {
return name;
}
// Setter pour name
public void setName(String name) {
this.name = name;
}
// Getter pour price
public double getPrice() {
return price;
}
// Setter avec validation
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}Le véritable pouvoir des setters est la capacité d'ajouter une logique de validation. Dans l'exemple ci-dessus, setPrice n'accepte que des valeurs non négatives, protégeant ainsi l'objet contre les données invalides.
Pour les champs boolean, les accesseurs utilisent généralement le préfixe is au lieu de get :
private boolean active;
public boolean isActive() {
return active;
}Vous pouvez également créer des champs en lecture seule en fournissant uniquement un getter, ou des champs en écriture seule en fournissant uniquement un setter. Cela vous donne un contrôle précis sur la manière dont le code externe interagit avec les données de votre objet.
Défi
FacileConstruisons un convertisseur de Temperature qui démontre la puissance des getters et setters avec une logique de validation.
Vous allez créer deux fichiers pour organiser votre code :
Temperature.java: Définissez une classe Temperature qui stocke une valeur de température en Celsius. La classe doit avoir :- Un champ privé
celsius(double) - Un champ privé
valid(boolean) qui suit si la température est physiquement possible - Un getter
getCelsius()qui retourne la valeur celsius - Un setter
setCelsius()qui n'accepte que des valeurs supérieures ou égales au zéro absolu (-273.15). Si la valeur est valide, définissezvalidà true ; sinon, ne modifiez pas celsius et définissezvalidà false - Un getter
isValid()pour le champ booléen (rappelez-vous : les getters booléens utilisent le préfixeis) - Un getter
getFahrenheit()qui convertit et retourne la température en Fahrenheit en utilisant la formule :(celsius * 9/5) + 32
- Un champ privé
Main.java: Créez un objet Temperature, lisez une valeur celsius en entrée, utilisez le setter pour la définir, puis affichez si la température est valide et son équivalent en Fahrenheit. Formatez votre sortie sur deux lignes :Valid: trueouValid: falseFahrenheit: X.X(affichant une décimale)
Vous recevrez une entrée : une valeur double représentant une température en Celsius.
Pour formater la sortie Fahrenheit avec une décimale, vous pouvez utiliser String.format("%.1f", value).
Aide-mémoire
Les getters et setters sont des méthodes qui fournissent un accès contrôlé aux champs privés. Un getter récupère la valeur d'un champ, tandis qu'un setter la modifie.
La convention de nommage suit un modèle standard : le préfixe get ou set suivi du nom du champ avec sa première lettre en majuscule.
public class Product {
private String name;
private double price;
// Getter pour name
public String getName() {
return name;
}
// Setter pour name
public void setName(String name) {
this.name = name;
}
// Getter pour price
public double getPrice() {
return price;
}
// Setter avec validation
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}Les setters peuvent inclure une logique de validation pour protéger les objets contre les données invalides. Dans l'exemple ci-dessus, setPrice n'accepte que des valeurs non négatives.
Pour les champs boolean, les getters utilisent le préfixe is au lieu de get :
private boolean active;
public boolean isActive() {
return active;
}Vous pouvez créer des champs en lecture seule en fournissant uniquement un getter, ou des champs en écriture seule en fournissant uniquement un setter.
Essayez vous-même
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double celsiusInput = scanner.nextDouble();
// TODO: Créer un objet Temperature
// TODO: Utiliser le setter pour définir la valeur en celsius
// TODO: Afficher si la température est valide (format: "Valid: true" ou "Valid: false")
// TODO: Afficher l'équivalent en Fahrenheit (format: "Fahrenheit: X.X")
// Astuce: Utiliser String.format("%.1f", value) pour une décimale
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron Itérateur