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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top