2
respostas

Dúvida sobre utilização do This na Classe Cliente

Boa noite , utilizei o this."atributo" na classe Cliente dentro dos métodos GET, pois entendi que devemos colocar o this para indicar o atributo em questão do método para evitar possíveis confusões, mas o Professor não utilizou o this nos seus métodos GET.

Gostaria de confirmar se acrescentar o this nesta Classe Cliente acabou sendo uma boa prática.

Att.. Thiago

Como Codifiquei

    public String getNome() {
        return this.nome;
    }

    public String getCpf() {
        return this.cpf;
    }

    public String getProfissao() {
        return this.profissao;

Como o Professor Paulo deixou como resolução

public class Cliente {

    public String getNome() {
        return nome;
    }

    public String getCpf() {
        return cpf;
    }

    public String getProfissao() {
        return profissao;
    }


}
2 respostas

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! ;)

Obrigado pelo retorno. Excelente exemplo e explicação. Parabéns !!