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 setNumber
método, puede estar seguro de que el valor de number
siempre está entre 1 y 10. Esto es mucho mejor que actualizar la number
variable directamente:
obj.number = 13;
Si actualiza number
directamente, es posible que cause efectos secundarios no deseados en otra parte de su código. Aquí, establecer number
en 13 viola la restricción de 1 a 10 que queremos establecer.
Hacer number
una variable privada y usar el setNumber
método evitaría que esto suceda.
Por otro lado, la única forma de leer el valor de number
es usando un método getter:
public int getNumber() { return this.number; }