112 votes

Comment fonctionnent les getters et setters ?

Je viens du monde de php. Pourriez-vous m'expliquer ce que sont les getters et setters et me donner quelques exemples ?

0 votes

@yegor256 Je comprends votre analogie avec le chien et la balle et je la soutiens même, mais qu'en est-il lorsqu'un objet "organisme vivant" stocke une valeur primitive occasionnelle, par exemple un ID ? Que faire si vous voulez aller un peu plus loin que la simple affectation mais que vous ne voulez pas écrire une nouvelle classe uniquement pour gérer les valeurs primitives ?

129voto

Paul Creasey Points 15663

Le tutorat n'est pas vraiment nécessaire pour cela. Lisez ce qui suit encapsulation

private String myField; //"private" means access to this is restricted to the class.

public String getMyField()
{
     //include validation, logic, logging or whatever you like here
    return this.myField;
}
public void setMyField(String value)
{
     //include more logic
     this.myField = value;
}

11 votes

Donc getter est juste une méthode qui récupère un champ privé et setter est une méthode qui définit un nouveau champ. merci pour l'excellente explication par code.

1 votes

Pouvez-vous passer un paramètre à un getter ?

2 votes

Noname : Non et non. Getter est un moyen d'obtenir une valeur mais PAS d'exposer la valeur contenue dans un champ, c'est-à-dire si vous appelez someObj.getTime().setHour(5) elle ne devrait pas affecter someObj L'état interne de l'entreprise. Aussi les setters et getters (accesseurs et mutateurs par leur nom plus sophistiqué) ont une signature de méthode très stricte, ce qui signifie que le getter n'a pas de paramètres. Les méthodes en général ne devraient faire qu'une seule chose de toute façon.

39voto

Mark Byers Points 318575

En Java, les getters et setters sont des fonctions tout à fait ordinaires. La seule chose qui les rend getters ou setters est la convention. Un getter pour foo est appelé getFoo et le setter est appelé setFoo. Dans le cas d'un booléen, le getter s'appelle isFoo. Ils doivent également avoir une déclaration spécifique, comme le montre cet exemple de getter et setter pour 'name' :

class Dummy
{
    private String name;

    public Dummy() {}

    public Dummy(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

La raison pour laquelle vous utilisez des récupérateurs et des régleurs au lieu de rendre vos membres publics est qu'il est possible de modifier l'implémentation sans changer l'interface. En outre, de nombreux outils et boîtes à outils qui utilisent la réflexion pour examiner les objets n'acceptent que les objets dotés de getters et setters. JavaBeans par exemple, doit avoir des getters et des setters ainsi que d'autres exigences.

9 votes

Ces constructeurs ne devraient-ils pas être dépourvus de "void" ?

0 votes

Le vide est en fait nécessaire ici. Si tu ne l'as pas, tu as.. : error: invalid method declaration; return type required

3 votes

Le vide n'est pas nécessaire ici

12voto

user3137648 Points 179
class Clock {  
        String time;  

        void setTime (String t) {  
           time = t;  
        }  

        String getTime() {  
           return time;  
        }  
}  

class ClockTestDrive {  
   public static void main (String [] args) {  
   Clock c = new Clock;  

   c.setTime("12345")  
   String tod = c.getTime();  
   System.out.println(time: " + tod);  
 }
}  

Lorsque vous lancez le programme, celui-ci démarre sur le secteur,

  1. l'objet c est créé
  2. fonction setTime() est appelé par l'objet c
  3. la variable time est défini comme la valeur transmise par
  4. fonction getTime() est appelé par l'objet c
  5. le temps est rendu
  6. Il passera à tod y tod être imprimé

10voto

superfav Points 464

Vous pouvez également lire " Pourquoi les méthodes getter et setter sont mauvaises " :

Bien que les méthodes getter/setter soient courantes en Java, elles ne sont pas particulièrement orientées objet (OO). En fait, elles peuvent nuire à la maintenabilité de votre code. De plus, la présence de nombreuses méthodes getter et setter est un signal d'alarme indiquant que le programme n'est pas nécessairement bien conçu d'un point de vue OO.

Cet article explique pourquoi vous ne devriez pas utiliser les getters et les setters (et quand vous pouvez les utiliser) et propose une méthodologie de conception qui vous aidera à sortir de la mentalité getter/setter.

1voto

Henric Edwards Points 838

C'est un bon point de départ, en plus des liens et des explications fournis par les autres posteurs : " Apprendre le langage Java - Objets et classes " .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X