Skip to content
Getter Setter

Getter_setter

Getter

Méthode public qui retourne la valeur d’un champ privé. Son nom commence par get + nom du champ

public class Person {
    private String name; // Champ privé

    // Getter pour le champ name
    public String getName() {
        return name;
    }
}

Setter

Méthode public qui permet de modifier la valeur d’un champ privé. Son nom commence par set + le nom du champ

public class Person {
    private String name;

    // Setter pour le champ name
    public void setName(String name) {
        this.name = name;
    }
}

Boolean

Pour les champs de type boolean, il est d’uage d’utiliser le prefixe is dans les getter :

private boolean active;

public boolean isActive() {
    return active;
}

public void setActive(boolean active) {
    this.active = active;
}

Exemple

public class Contact {
    private String name;
    private String phone;
    private int age;
    private boolean favorite;

    // Getters
    public String getName() {
        return name;
    }

    public String getPhone() {
        return phone;
    }

    public int getAge() {
        return age;
    }

    public boolean isFavorite() {
        return favorite;
    }

    // Setters
    public void setAge(int age) {
        if (age < 0) {
            System.out.println("L’âge ne peut pas être négatif !");
            return;
        }
        this.age = age;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public void setFavorite(boolean favorite) {
        this.favorite = favorite;
    }
}

On l’utilise ensuite de cette manière

Contact friend = new Contact();
friend.setName("John Doe");
friend.setPhone("+1-999-123-45-67");
friend.setAge(25);
friend.setFavorite(true);

System.out.println("Nom : " + friend.getName());
System.out.println("Téléphone : " + friend.getPhone());
System.out.println("Âge : " + friend.getAge());
System.out.println("Favori : " + (friend.isFavorite() ? "Oui" : "Non"));

Bonne pratique

Tous les champs n’ont pas besoin de setters publics Parfois un champ doit être en lecture seule, par exemple un identifiant unique définis à la création de l’objet et qui ne change plus. Dans ce cas, on ne fournit pas de setter:

public class Contact {
    private final int id; // final — ne peut pas être modifié après l’initialisation

    public Contact(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    // Pas de setId !
}

Utiliser les getters/setter pour contrôler l’accès et valider

public void setName(String name) {
    if (name == null || name.trim().isEmpty()) {
        System.out.println("Le nom ne peut pas être vide !");
        return;
    }
    this.name = name;
}

Ne pas divulguer directement les objets internes mutables Si on as un champs, par exemple, un tableau de numéro de téléphone:

private String[] phones;

Il ne faut pas retourner directement via un getter. On utilise une copie du tableau pour que le code externe ne puisse pas venir modifier les données interne.

// copy
public String[] getPhones() {
    return Arrays.copyOf(phones, phones.length); // On renvoie une copie
}

// clonage
public String[] getPhones() {
    return phones.clone();
}

Rendre les getters et setters clairs et simples

  • pas de logique métier conmplexe - leur role doit rester simple -> controler d’acces et validation simple
  • si un champ ne doit pas changer, pas de setter
  • si un champ ne doit pas etre accessible depuis l’exterieur -> pas de getter

Getter et setters pour des props calculées et immuables

Parfois la valeur n’est pas stockées dans un champs mais calculées à la volées

public class Rectangle {
    private int width;
    private int height;

    public int getArea() {
        return width * height;
    }
}

Par besoin de setter - on ne peux pas définir directement, seulement modifier la width et lq heigthh