Getters y Setters en Java explicados

Los captadores y definidores se utilizan para proteger sus datos, especialmente al crear clases.

Para cada variable de instancia, un método getter devuelve su valor mientras que un método setter establece o actualiza su valor. Dado esto, captadores y definidores son también conocidos como descriptores de acceso y mutators , respectivamente.

Por convención, los getters comienzan con la palabra "get" y los setters con la palabra "set", seguida de un nombre de variable. En ambos casos, la primera letra del nombre de la variable está en mayúscula:

public class Vehicle { private String color; // Getter public String getColor() { return color; } // Setter public void setColor(String c) { this.color = c; } }

El método getter devuelve el valor del atributo. El método setter toma un parámetro y lo asigna al atributo.

Una vez definidos el getter y setter, lo usamos en nuestro main:

public static void main(String[] args) { Vehicle v1 = new Vehicle(); v1.setColor("Red"); System.out.println(v1.getColor()); } // Outputs "Red"

Getters y setters permiten controlar los valores. Puede validar el valor dado en el setter antes de establecer el valor.

¿Por qué utilizar getters y setters?

Los getters y setters le permiten controlar cómo se accede a las variables importantes y cómo se actualizan en su código. Por ejemplo, considere este método de establecimiento:

public void setNumber(int number) { if (number  10) { throw new IllegalArgumentException(); } this.number = num; }

Al usar el setNumbermétodo, puede estar seguro de que el valor de numbersiempre está entre 1 y 10. Esto es mucho mejor que actualizar la numbervariable directamente:

obj.number = 13;

Si actualiza numberdirectamente, es posible que cause efectos secundarios no deseados en otra parte de su código. Aquí, establecer numberen 13 viola la restricción de 1 a 10 que queremos establecer.

Hacer numberuna variable privada y usar el setNumbermétodo evitaría que esto suceda.

Por otro lado, la única forma de leer el valor de numberes usando un método getter:

public int getNumber() { return this.number; }