Getters / setters en Java
-
22-08-2019 - |
Pregunta
Soy nuevo a Java, pero tienen algo de experiencia programación orientada a objetos con ActionScript 3, por lo que estoy tratando de migrar depender de cosas que conozco.
En ActionScript 3 puede crear captadores y definidores utilizando el obtener y definir palabras clave, es decir, se crea un método en los datos de la clase y acceder a través de una propiedad de una instancia de esa clase. Podría parecer complicado, pero no lo es. He aquí 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 me gustaría acceder 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 iba a hacer eso en Java?
Sólo tener algunos campos públicos está fuera de la cuestión. Me he dado cuenta de que existe esta convención de usar obtiene y pone delante de métodos, que estoy bien con.
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 ActionScript 3 getter / setters en Java, como en el acceso a un campo privado como un campo de una instancia de la clase, pero tener un método de aplicación de dicha internamente en la clase?
Solución
Nop. AS3 captadores y definidores son una cosa ECMAScript. En Java, que está pegado con la setval funciones de estilo () GETVAL () y - no hay ninguna azúcar sintáctico para hacer las cosas fáciles para usted
.Creo que Eclipse puede ayudar a auto-generar ese tipo de cosas, aunque ...
Otros consejos
Su código Java está bien, excepto que usted, que desee hacer _name
privado .
No hay obtener y Set palabras clave en Java como en su ejemplo de AS3. Lo sentimos, no hay nada mejor que lo que está haciendo ya.
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;
}
}
Lamentablemente, no, no es el apoyo a nivel de lenguaje equivalente en Java.
El conseguir * * y establecer patrones, aunque están tan establecida en la cultura de Java que encontrará un fuerte apoyo IDE para ellos (por ejemplo, eclipse hará de forma automática), y si está trabajando en algo que utiliza el lenguaje de expresión hecha por primera vez para JSP (eL), entonces usted será capaz de utilizar la notación de propiedad para captadores y definidores de acceso.
Yo 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. Este es 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 hacer las cosas más complicadas de lo necesario. Se da a menudo el caso de que añadir complejidad sufrirá de Usted-Aint-Va-Necesidad-It
Una manera independiente IDE es usar Lombok , una biblioteca basada en la anotación que genera captadores, set, e incluso equals()
y hashcode()
. Esto se hace para que el compilador, pero no en el archivo de origen, por lo que no tiene que mirar a los métodos, sólo los utilizan.
En Java, la única opción que tiene, sin exponer los componentes internos de su objeto es hacer que sus propios captadores y definidores y cuando tenga en su ejemplo.
La convención es anteponer get
o set
en frente del campo que está siendo alterada. Así, como en el ejemplo, el campo name
tendría métodos getName
y setName
como su correspondiente get y set, respectivamente.
Además, antes de la adición de las incubadoras y captadores, que podría ser una buena idea que preguntarse por qué estás exponiendo a los datos internos del objeto en cuestión.
I sugiere que lea este artículo -
http://www.javaworld.com/javaworld/ jw-09-2003 / jw-0905-toolbox.html