Comment fonctionnent les getters et les setters?

je viens du monde php. Pourriez-vous nous expliquer ce que sont les getters et les setters et nous donner quelques exemples?

98
demandé sur Richard Tingle 2010-01-10 15:20:35

6 réponses

Tutoriel n'est pas vraiment nécessaire pour cela. Lire la suite encapsulation

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

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;
}
119
répondu Paul Creasey 2014-04-29 12:35:40

en Java getters et setters sont des fonctions tout à fait ordinaires. La seule chose qui les fait getter ou setter, c'est la convention. Un getter pour foo s'appelle getfoo et le setter s'appelle setFoo. Dans le cas d'un booléen, le getter s'appelle isFoo. Ils doivent aussi avoir une déclaration spécifique comme indiqué dans 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 d'utiliser getters et setters au lieu de rendre vos membres publics est qu'il permet de changer 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 qui ont des getter et setter. JavaBeans par exemple doit avoir getters et setters ainsi que d'autres exigences.

36
répondu Mark Byers 2015-12-14 12:02:13
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 exécutez le programme, le programme commence dans le réseau,

  1. création de l'objet c
  2. fonction setTime() est appelé par l'objet c
  3. la variable time est définie à la valeur transmise par
  4. fonction getTime() est appelé par l'objet c
  5. le temps est retourné
  6. il passera à tod et tod imprimée
12
répondu user3137648 2014-06-11 06:30:50

vous pouvez aussi vouloir 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, ils peuvent endommager la maintenabilité de votre code. De plus, la présence de nombreuses méthodes getter et setter est un signal d'alarme 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 getter et setter (et quand vous pouvez les utiliser) et suggère une méthodologie de conception qui vous aidera à sortir de la mentalité getter/setter.

7
répondu superfav 2010-01-10 18:33:28

1. Les meilleurs getters / setters sont intelligents.

voici un exemple javascript de mozilla:

var o = { a:0 } // `o` is now a basic object

Object.defineProperty(o, "b", { 
    get: function () { 
        return this.a + 1; 
    } 
});

console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)

j'ai utilisé ces beaucoup parce qu'ils sont impressionnant . Je l'utiliserais pour obtenir fantaisie avec mon codage + animation. Par exemple, faites un setter qui traite avec un Number qui affiche ce nombre sur votre page web. Lorsque le setter est utilisé, il anime l'ancien nombre au nouveau en utilisant un tweener . Si le nombre initial est 0 et que vous le définissez à 10, alors vous verrez les nombres passer rapidement de 0 à 10, disons, une demi-seconde. Les utilisateurs aiment ce genre de choses et c'est amusant à créer.

2. Des Getters / setters en php

exemple de sof

<?php
class MyClass {
  private $firstField;
  private $secondField;

  public function __get($property) {
    if (property_exists($this, $property)) {
      return $this->$property;
    }
  }

  public function __set($property, $value) {
    if (property_exists($this, $property)) {
      $this->$property = $value;
    }

    return $this;
  }
}
?>

citations:

2
répondu Jacksonkr 2017-05-23 12:18:25

exemple est ici pour expliquer cette façon la plus simple d'utiliser getter et setter dans 'java' . on peut le faire de manière plus simple mais getter et setter ont quelque chose de spécial qui est lors de l'utilisation de membre privé de la classe de parent dans la classe de l'enfant dans l'héritage. vous pouvez le rendre possible en utilisant getter et setter.

package stackoverflow;

    public class StackoverFlow 

    {

        private int x;

        public int getX()
        {
            return x;
        }

        public int setX(int x)
        {
          return  this.x = x;
        }
         public void showX()
         {
             System.out.println("value of x  "+x);
         }


        public static void main(String[] args) {

            StackoverFlow sto = new StackoverFlow();
            sto.setX(10);
            sto.getX();
            sto.showX();
        }

    }
0
répondu Bashir ahmad 2017-07-06 14:03:18