Artigo original: Getters and Setters in Java Explained
Getters e setters são usados para proteger seus dados, especialmente na criação de classes.
Para cada instância de variável, um método getter retorna seu valor, enquanto um método setter o define ou atualiza. Com isso em mente, getters e setters também são conhecidos como métodos de acesso e de modificação, respectivamente.
Por convenção, getters começam com a palavra "get" e setters com a palavra "set", seguidos de um nome de variável. Em ambos os casos, a primeira letra do nome da variável será maiúscula:
public class Vehicle {
private String color;
// Getter
public String getColor() {
return color;
}
// Setter
public void setColor(String c) {
this.color = c;
}
}
O método getter retorna o valor do atributo. O método setter recebe um parâmetro e o coloca no atributo.
Quando os métodos getter e setter estiverem definidos, os utilizamos no main:
public static void main(String[] args) {
Vehicle v1 = new Vehicle();
v1.setColor("Vermelho");
System.out.println(v1.getColor());
}
// O resultado é "Vermelho"
Getters e setters permitem o controle dos valores. Você pode validar o valor dado no setter antes de definir o valor de fato.
Por que usar getters e setters?
Getters e setters permitem controlar a forma como variáveis importantes são acessadas e atualizadas no seu código. Por exemplo, considere este método setter:
public void setNumber(int number) {
if (number < 1 || number > 10) {
throw new IllegalArgumentException();
}
this.number = num;
}
Ao usar o método setNumber
, você pode se certificar de que o valor de number
está sempre entre 1 e 10. Isso é muito melhor do que atualizar a variável number
diretamente:
obj.number = 13;
Se você atualizar number
diretamente, você pode vir a causar efeitos colaterais indesejados em outros pontos do seu código. Aqui, definir number
com o valor de 13 violaria a restrição que desejamos estabelecer de que o número precisa estar entre 1 e 10.
Tornar number
uma variável privada e usar o método setNumber
evita que isso aconteça.
Por outro lado, a única maneira de ler o valor de number
é usando um método getter:
public int getNumber() {
return this.number;
}