Getter/setter in Java
-
22-08-2019 - |
Domanda
Sono nuovo in Java, ma ho una certa esperienza OOP con ActionScript 3, quindi sto cercando di eseguire la migrazione basandomi su cose che conosco.
In ActionScript 3 puoi creare getter e setter utilizzando le parole chiave get e set, ovvero crei un metodo nella classe e accedi ai dati tramite una proprietà di un'istanza di quella classe.Potrei sembrare complicato, ma non lo è.Ecco un esempio:
class Dummy{
private var _name:String;
public function Dummy(name:String=null){
this._name = name;
}
//getter
public function get name():String{
return _name;
}
//setter
public function set name(value:String):void{
//do some validation if necessary
_name = value;
}
}
E accederei name
in un oggetto come:
var dummy:Dummy = new Dummy("fred");
trace(dummy.name);//prints: fred
dummy.name = "lolo";//setter
trace(dummy.name);//getter
Come potrei farlo in Java?
Avere solo alcuni campi pubblici è fuori questione.Ho notato che esiste questa convenzione di utilizzare get e set davanti ai metodi, cosa con cui sono d'accordo.
Per esempio,
class Dummy{
String _name;
public void Dummy(){}
public void Dummy(String name){
_name = name;
}
public String getName(){
return _name;
}
public void setName(String name){
_name = name;
}
}
Esiste un equivalente di getter/setter di ActionScript 3 in Java, come in Accedere a un campo privato come campo da un'istanza della classe, ma disporre di un metodo per implementarlo internamente nella classe?
Soluzione
No. getter e setter AS3 sono una cosa ECMAScript. In Java, sei bloccato con la GetVal () e SETVAL) Funzioni di stile (- non c'è alcun zucchero sintattico per rendere le cose facili per voi
.Credo che Eclipse può aiutare auto-generazione di quei tipi di cose anche se ...
Altri suggerimenti
Il tuo codice Java va bene, tranne quello che vorresti creare _name
privato.
Non ci sono Ottenere E impostato parole chiave in Java come nel tuo esempio AS3.Mi dispiace, non c'è niente di meglio di quello che stai già facendo.
Codice corretto:
class Dummy {
private String _name;
public void Dummy() {}
public void Dummy(String name) {
setName(name);
}
public String getName() {
return _name;
}
public void setName(String value) {
_name = value;
}
}
Purtroppo, no, non v'è il supporto equivalente a livello di linguaggio Java.
Il ottenere * * e impostare modelli anche se sono così stabiliti nella cultura java che troverete un forte sostegno IDE per loro (per esempio, Eclipse li fare in modo automatico), e se si sta lavorando in qualcosa che utilizza il linguaggio delle espressioni prima fatta per JSP (EL), allora si sarà in grado di utilizzare la notazione proprietà per getter e setter di accesso.
Vorrei prendere in considerazione non avendo il getter o setter in quanto non fanno nulla nel tuo caso, tranne rendere il codice più complicato. Ecco un esempio, senza getter o setter.
class Dummy {
public String name;
public Dummy(String name) { this.name = name; }
}
Dummy dummy = new Dummy("fred");
System.out.println(dummy.name);//getter, prints: fred
dummy.name = "lolo";//setter
System.out.println(dummy.name);//getter, prints: lolo
IMHO Non rendere le cose più complicate di quanto è necessario. E così spesso il caso che l'aggiunta di complessità soffrirà You-Aint-gonna-Need-It
Un modo IDE indipendente è quello di utilizzare Lombok , una libreria di annotazione-based che genera getter, setter, e anche equals()
e hashcode()
. Lo fa per il compilatore, ma non nel file di origine, in modo da non deve guardare a metodi, basta usarli.
In Java, l'unica opzione che avete senza esporre le parti interne del vostro oggetto è quello di rendere i propri getter e setter come si deve nel tuo esempio.
La convenzione è anteporre get
o set
davanti al campo che viene alterato. Così, come nel tuo esempio, il campo name
avrebbe getName
e setName
metodi come il loro corrispondente getter e setter, rispettivamente.
Anche prima di aggiungere setter e getter, potrebbe essere una buona idea chiedere a te stesso perché stai esponendo i dati interni dell'oggetto in questione.
Mi suggerisce di leggere questo articolo -
http://www.javaworld.com/javaworld/ JW-09-2003 / JW-0905-toolbox.html