Come funzionano getter e setter?

Vengo dal mondo php. Potresti spiegare cosa sono i getter ei setter e potresti darti qualche esempio?

Il tutorial non è veramente necessario per questo. Leggi sull’incapsulamento

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; } 

In getter e setter Java sono funzioni completamente ordinarie. L’unica cosa che li rende getter o setter è convenzione. Un geter per foo si chiama getFoo e il setter è chiamato setFoo. Nel caso di un booleano, il getter si chiama isFoo. Devono inoltre avere una dichiarazione specifica come mostrato in questo esempio di getter e setter per ‘nome’:

 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; } } 

Il motivo dell’utilizzo di getter e setter invece di rendere pubblici i membri è che consente di modificare l’implementazione senza modificare l’interfaccia. Inoltre, molti strumenti e toolkit che usano la riflessione per esaminare oggetti accettano solo oggetti che hanno getter e setter. Ad esempio, i JavaBeans devono avere getter e setter e altri requisiti.

 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); } } 

Quando esegui il programma, il programma si avvia sulla rete,

  1. l’object c è stato creato
  2. la funzione setTime() viene chiamata dall’object c
  3. il time variabile è impostato sul valore passato
  4. la funzione getTime() è chiamata dall’object c
  5. il tempo viene restituito
  6. Passerà a tod e tod essere stampato

Potresti anche voler leggere ” Perché i metodi getter e setter sono malvagi “:

Sebbene i metodi getter / setter siano comuni in Java, non sono particolarmente orientati agli oggetti (OO). In effetti, possono danneggiare la manutenibilità del codice. Inoltre, la presenza di numerosi metodi getter e setter è una bandiera rossa che il programma non è necessariamente ben progettato da una prospettiva OO.

Questo articolo spiega perché non dovresti usare getter e setter (e quando puoi usarli) e suggerisce una metodologia di progettazione che ti aiuterà a uscire dalla mentalità getter / setter.

1. I migliori getter / setter sono intelligenti.

Ecco un esempio javascript di mozilla:

 var o = { a:0 } // `o` is now a basic object Object.defineProperty(o, "b", { get: function () { return this.a + 1; } }); console.log(ob) // Runs the getter, which yields a + 1 (which is 1) 

Ho usato questi A LOT perché sono fantastici . Lo userei quando mi diverto con la mia animazione di codifica +. Ad esempio, fai un setter che si occupa di un Number che visualizza quel numero sulla tua pagina web. Quando viene utilizzato il setter, il vecchio numero viene animato con il tweener . Se il numero iniziale è 0 e lo si imposta su 10, si vedrebbero i numeri scorrere rapidamente da 0 a 10, diciamo, mezzo secondo. Gli utenti adorano questa roba ed è divertente da creare.

2. Getter / setter in php

Esempio da sof

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

citings:

esempio è qui per espalare questo modo più semplice di usare getter e setter in ‘java’. si può fare ciò in modo più diretto, ma getter e setter hanno qualcosa di speciale che è quando si usa un membro privato della class genitore nella class figlia nell’ereditarietà. puoi renderlo ansible usando getter e 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(); } }