[Tip] Getters y Setters enlazados en Java

Estándar

He estado trabajando últimamente con C# y VB .Net y ha habido un par de cosas que me han gustado de las implementaciones de ciertos aspectos en estos lenguajes. Una cosa de la que me he quejado siempre programando en Java es de la implementación de los métodos accesores de atributos en sus clases.

Es decir, si nosotros tenemos un atributo en una clase y queremos acceder a él, la manera correcta de hacer esto es declarando un get y un set para este atributo, de la siguiente manera:

public class Persona {
    private Integer edad;

    public Integer getEdad() {
        return this.edad;
    }

    public void setEdad(Integer edad) {
        this.edad= edad;
    }

    private String nombre;

    public String getNombre() {
        return this.nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
}

Algunos IDE’s proporcionan la característica de generar estos accesores automáticamente a partir de los atributos definidos en la clase, pero aún así usarlos y verlos en el código es bastante incómodo. En la plataforma .Net se pueden crear propiedades, con la palabra clave Property, para crear estos accesos. Pero, lo que hace interesantes a estas propiedades es la capacidad de crear objetos usando estas propiedades, sin definir un constructor con todos los parámetros necesarios. Por ejemplo:

Public Class Persona
    Private _edad as Integer

    Public Property Edad() as Integer
        Get
            Return _edad
        End Get
        Set (ByVal value as integer)
            _edad = value
        End Set
    End Property
End Class

Lo que nos permite crear objetos de la siguiente manera:

Dim p as New Persona With { _
    .Edad = 15 _
}

Dejando a un lado la sintaxis, la creación del objeto con parámetros variables es muy útil y menos farragosa que la solución de crear un constructor por cada combinación de parámetros posible.

Dicho esto, existe una manera enlazar una consecución de setters en java, y en cualquier lenguaje, para emular el comportamiento de esa creación. Usando la clase persona (la escrita en Java) cambiamos los setters para que se comporten de la siguiente manera:

...

public Persona setEdad(Integer edad) {
    this.edad = edad;

    return this;
}

public Persona setNombre(String nombre) {
    this.nombre = nombre;

    return this;
}

...

Este, como los americanos dicen, workaround sirve para que podamos “endulzar” un poco la sintaxis del lenguaje usando sentencias como la siguiente:

...

//Constructor por defecto

Persona p = new Persona();

p.setNombre("alex952").setEdad(89);

...

Espero que os sirva alguna vez el truco, sobre todo cuando vayáis a hacer una clase con muchos atributos.

Anuncios

Un comentario en “[Tip] Getters y Setters enlazados en Java

  1. Hi! I’ve been following your blog for a while now and finally got the courage to go ahead and give you a shout out from Houston Tx! Just wanted to mention keep up the excellent work!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s