web-dev-qa-db-fra.com

Comment fonctionnent les getters et les setters?

Je viens du monde php. Pourriez-vous expliquer ce que sont les getters et les setters et vous donner des exemples?

104
ajsie

Le tutoriel n'est pas vraiment nécessaire pour cela. Lire sur 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;
}
125
Paul Creasey

Dans Java, les getters et les setters sont des fonctions tout à fait ordinaires. La seule chose qui fait d'eux des getters ou des setters 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 également avoir une déclaration spécifique, comme indiqué dans cet exemple de getter et de 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;
    }
}

Au lieu d'utiliser des getters et des setters au lieu de rendre vos membres publics, c'est parce que cela permet de modifier l'implémentation sans modifier l'interface. En outre, de nombreux outils et boîtes à outils qui utilisent la réflexion pour examiner des objets n'acceptent que les objets dotés de sélecteurs et de paramètres. JavaBeans par exemple, doit avoir des accesseurs et des setters, ainsi que d'autres exigences.

38
Mark Byers
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 démarre dans le secteur,

  1. l'objet c est créé
  2. la fonction setTime() est appelée par l'objet c
  3. la variable time est définie sur la valeur transmise par
  4. la fonction getTime() est appelée par l'objet c
  5. le temps est retourné
  6. Il passera à tod et tod à imprimer
12
user3137648

Vous voudrez peut-être aussi 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 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 de getters et de setters (et quand vous pouvez les utiliser) et suggère une méthodologie de conception qui vous aidera à sortir de la mentalité de getter/setter.

8
superfav

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é BEAUCOUP ces parce qu'ils sont géniaux . Je voudrais l'utiliser lorsque je m'imagine avec mon codage + mon animation. Par exemple, créez un setter qui traite un Number qui affiche ce numéro sur votre page Web. Lorsque le passeur est utilisé, il convertit l'ancien numéro en un nouveau numéro à l'aide de tweener . Si le nombre initial est 0 et que vous le définissez à 10, vous verrez alors les chiffres passer rapidement de 0 à 10, disons, une demi-seconde. Les utilisateurs aiment ce genre de choses et c'est amusant à créer.

2. 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
Jacksonkr

Voici un exemple pour expliquer le moyen le plus simple d'utiliser getter et setter en Java. Cela peut être fait de manière plus simple, mais les méthodes getter et setter ont quelque chose de spécial lorsque vous utilisez un membre privé de la classe parent dans une classe enfant en 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();
        }

    }
1
Bashir ahmad