Getters/setters en Java
actionscript-3 accessor (7)
Soy nuevo en Java, pero tengo algo de experiencia en OOP con ActionScript 3, así que estoy tratando de migrar confiando en cosas que conozco.
En ActionScript 3 puede crear getters y setters utilizando las palabras clave get y set, lo que significa que crea un método en la clase y accede a los datos a través de una propiedad de una instancia de esa clase. Puede parecer complicado, pero no lo es. Aquí hay un ejemplo:
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;
}
}
Y accedería al name
en un objeto como:
var dummy:Dummy = new Dummy("fred");
trace(dummy.name);//prints: fred
dummy.name = "lolo";//setter
trace(dummy.name);//getter
¿Cómo haría eso en Java?
Solo tener algunos campos públicos está fuera de discusión. Me di cuenta de que existe esta convención de usar get y set en frente de los métodos, con lo que estoy de acuerdo.
Por ejemplo,
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;
}
}
¿Hay un equivalente de getter / setters de ActionScript 3 en Java, como el acceso a un campo privado como un campo de una instancia de la clase, pero que tiene un método para implementarlo internamente en la clase?
Además, antes de agregar setters y getters, podría ser una buena idea preguntarse por qué está exponiendo los datos internos del objeto en cuestión.
Le sugiero que lea este artículo: http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html
Consideraría no tener el getter o setter ya que no hacen nada en su caso, excepto que el código sea más complicado. Aquí hay un ejemplo sin getters o setters.
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
En mi humilde opinión, no hagas las cosas más complicadas de lo necesario. Con demasiada frecuencia, el hecho de agregar complejidad sufrirá de You-Aint-Gonna-Need-It
En Java, la única opción que tiene sin exponer las partes internas de su objeto es hacer sus propios getters y setters como lo hizo en su ejemplo.
La convención es anteponer get
o set
en frente del campo que se está alterando. Entonces, como en su ejemplo, el name
del campo tendría los métodos getName
y setName
como su getter y setter correspondientes, respectivamente.
Lamentablemente, no, no existe el soporte de nivel de idioma equivalente en Java.
Sin embargo, los patrones get * y set * están tan establecidos en la cultura java que encontrará un soporte IDE fuerte para ellos (p. Ej., Eclipse los hará automáticamente), y si está trabajando en algo que usa primero el lenguaje de expresiones hecho para jsps (EL), entonces podrá usar la notación de propiedad para acceder a getters y setters.
Nop. Los getters y setters de AS3 son una cosa de ECMAScript. En Java, está atascado con las funciones de estilo getVal () y setVal (); no hay ningún azúcar sintáctico que le facilite las cosas.
Creo que Eclipse puede ayudar a generar automáticamente ese tipo de cosas ...
Su código Java está bien, excepto que lo haría, desea hacer que _name
privado .
No hay palabras clave get y set en Java como en su ejemplo de AS3. Lo siento, no es mejor que lo que ya estás haciendo.
Código corregido:
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;
}
}
Una forma independiente de IDE es usar Lombok , una biblioteca basada en anotaciones que genera getters, setters e incluso equals()
y hashcode()
. Hace esto para el compilador, pero no en el archivo de origen, por lo que no tiene que mirar los métodos, simplemente utilícelos.