Je viens du monde php. Pouvez-vous expliquer ce que sont les getters et les setters et pourriez-vous vous donner quelques exemples?
Je viens du monde php. Pouvez-vous expliquer ce que sont les getters et les setters et pourriez-vous vous donner quelques exemples?
Réponses:
Un didacticiel n'est pas vraiment nécessaire pour cela. En savoir plus sur l' 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;
}
someObj.getTime().setHour(5)
cela ne devrait pas affecter someObj
l'état interne de. Les setters et les getters (accesseurs et mutateurs par leur nom plus sophistiqué) ont également une signature de méthode très stricte, ce qui signifie que le getter n'a aucun paramètre. Les méthodes en général ne devraient faire qu'une seule chose de toute façon.
this
mot-clé est facultatif sauf s'il y a un conflit avec quelque chose qui a une portée plus spécifique. Dans l'exemple que vous avez donné, le setter qui est créé aura un seul paramètre dont le nom correspond au nom du champ, par conséquent this.fieldName = fieldName
, est utilisé pour distinguer que le champ est assigné plutôt que le paramètre est assigné à lui-même comme le fieldName = fieldname
ferait. Aucun conflit de ce type n'existe dans le getter.
En Java, les getters et les 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 est appelé isFoo. Ils doivent également 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 des getters et des setters au lieu de rendre vos membres publics est que cela 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 des objets n'acceptent que les objets qui ont des getters et des setters. Les JavaBeans, par exemple, doivent avoir des getters et des setters ainsi que d'autres exigences.
error: invalid method declaration; return type required
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 sur secteur,
setTime()
est appelée par l'objet ctime
est définie sur la valeur passée pargetTime()
est appelée par l'objet ctod
et sera tod
imprimé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, ils peuvent endommager la maintenabilité de votre code. De plus, la présence de nombreuses méthodes getter et setter est un drapeau rouge indiquant que le programme n'est pas nécessairement bien conçu du 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 suggère une méthodologie de conception qui vous aidera à sortir de la mentalité getter / setter.
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)
Je les ai beaucoup utilisés parce qu'ils sont géniaux . Je l'utiliserais lorsque je deviendrais fantaisie avec mon codage + animation. Par exemple, créez un setter qui traite un Number
qui affiche ce numéro sur votre page Web. Lorsque le setter est utilisé, il anime l'ancien numéro vers le nouveau numéro à l'aide d'un tweener . Si le nombre initial est 0 et que vous le définissez sur 10, vous verrez les nombres passer rapidement de 0 à 10, disons, une demi-seconde. Les utilisateurs adorent ce truc et c'est amusant à créer.
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:
Voici un exemple pour expliquer la manière la plus simple d'utiliser getter et setter en java. On peut le faire d'une manière plus simple, mais le getter et le setter ont quelque chose de spécial qui se produit lors de l'utilisation d'un membre privé de la classe parent dans la classe enfant en héritage. Vous pouvez rendre cela 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();
}
}