Vengo dal mondo php. Potresti spiegare cosa sono getter e setter e potresti fornire alcuni esempi?
Vengo dal mondo php. Potresti spiegare cosa sono getter e setter e potresti fornire alcuni esempi?
Risposte:
Il tutorial non è realmente richiesto per questo. Leggi su 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;
}
someObj.getTime().setHour(5)
non dovrebbe influenzare lo someObj
stato interno di. Anche setter e getter (accessors e mutator con il loro nome più elaborato) hanno una firma del metodo molto rigorosa, il che significa che getter non ha parametri. I metodi in generale dovrebbero comunque fare solo una cosa.
this
parola chiave è facoltativa a meno che non vi sia un conflitto con qualcosa che ha un ambito più specifico. Nell'esempio che hai fornito, il setter che viene creato avrà un singolo parametro il cui nome corrisponde al nome del campo, quindi this.fieldName = fieldName
, viene utilizzato per distinguere che il campo viene assegnato piuttosto che il parametro che viene assegnato a se stesso come si fieldName = fieldname
otterrebbe. Nessun conflitto di questo tipo esiste nel getter.
In Java getter e setter sono funzioni completamente ordinarie. L'unica cosa che li rende getter o setter è la convenzione. Un getter per foo si chiama getFoo e il setter si chiama setFoo. Nel caso di un booleano, il getter è chiamato isFoo. Devono anche avere una dichiarazione specifica come mostrato in questo esempio di un getter e setter per '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;
}
}
Il motivo per utilizzare getter e setter invece di rendere pubblici i propri membri è che rende possibile modificare l'implementazione senza modificare l'interfaccia. Inoltre, molti strumenti e toolkit che usano la riflessione per esaminare gli oggetti accettano solo oggetti che hanno getter e setter. I JavaBeans, ad esempio, devono avere getter e setter oltre ad alcuni altri requisiti.
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);
}
}
Quando si esegue il programma, il programma si avvia in rete,
setTime()
è chiamata dall'oggetto ctime
è impostata al valore passato dagetTime()
è chiamata dall'oggetto ctod
e tod
verrà stampatoPotresti anche 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.
Ecco un esempio di javascript da 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)
Li ho usati MOLTO perché sono fantastici . Lo userei quando mi diverto con la mia codifica + animazione. Ad esempio, crea un setter che si occupi di un Number
numero che mostra quel numero sulla tua pagina web. Quando viene utilizzato il setter, anima il vecchio numero con il nuovo numero utilizzando un tweener . Se il numero iniziale è 0 e lo imposti a 10, vedresti i numeri passare rapidamente da 0 a 10, diciamo, mezzo secondo. Gli utenti adorano questa roba ed è divertente da creare.
Esempio da 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;
}
}
?>
citings:
Ecco un esempio per spiegare il modo più semplice di usare getter e setter in java. Si può farlo in un modo più diretto, ma getter e setter hanno qualcosa di speciale che è quando si utilizza un membro privato della classe genitore nella classe figlia nell'ereditarietà. Puoi renderlo possibile 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();
}
}