Olá Thiago, tudo bem com você?
O this dentro dos Getters não são obrigatórios. Isso porque dentro do escopo desses métodos não tem como o método se confundir e retornar um valor que não seja da própria classe. Para ficar mais claro, vamos pegar como exemplo o Getter e o Setter do atributo nome
:
public class Cliente {
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Ambos os métodos tem acesso ao atributo nome
do cliente. E dentro do escopo de getNome()
, não tem como o método retornar qualquer outro valor que não seja esse atributo.
Já no setNome(String nome)
, nós temos tanto o atributo nome
do cliente, como também temos o valor nome
que recebemos como argumento dentro dos parênteses do método! Em casos como esse onde existem dois valores com o mesmo nome, precisamos do this para deixar claro quem é o atributo e quem é o argumento. Situação que não acontece com o getNome()
que não recebe nenhum argumento com o mesmo nome do atributo.
Se quiser fazer um teste rápido, deixe o seu Setter sem especificar quem é o atributo e depois tente imprimir um nome que você "settou":
public class Cliente {
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome) {
nome = nome; // nome sem o this
}
}
public class TestaCliente {
public static void main(String[] args) {
Cliente cliente = new Cliente();
cliente.setNome("Thiago");
System.out.println(cliente.getNome());
}
}
O motivo para o resultado que você verá é uma questão de escopo. Ao escrevermos nome = nome
sem usar o this.nome
, o Java pega a variável nome
com o menor escopo, o que significa que estamos pegando o argumento nome
e atribuindo seu valor à ele mesmo, enquanto o atributo nome
que definimos na classe nunca é tocado!
Se tiver qualquer dúvida, por favor, me avise! ;)