Olá, Alexandre.
Quando você diz que é convenção do Java usar this.atributo = valor para mim que estou iniciando em Java não entra na minha cabeça pois estariamos aceitando um valor que potenciamente pode estar inválido como por exemplo um CPF que um usário pode digitar.
Então só pra confirmar, imagine o seguinte cenário: existem dois formulários com os campos nome e CPF, um formulário para cadastro e outro para edição. Os dois campos são obrigatórios na instanciação do objeto, então um esboço da minha classe seria:
public class Pessoa {
private String nome;
private String cpf;
public Pessoa(String nome, String cpf) {
// Se eu fizesse this.cpf = cpf; algum valor inválido seria atribuido, por isso não entendi a convenção :/
validaNome(nome);
validaCPF(cpf);
}
public void setNome(String nome) {
validaNome(nome);
}
public void setCPF(String cpf) {
validaCPF(cpf);
}
private final void validaNome(String nome) {
if(nome.length < 5) {
throw new IllegalArgumentException("O campo nome deve ter no minímo 5 caracteres");
}
this.nome = nome;
}
private final void validaCPF(String cpf) {
if(cpf nao é valido) {
throw new IllegalArgumentException("O CPF informado não é válido");
}
this.cpf = cpf;
}
}
Talvez eu esteja apressando muito as coisas mas no momento que estou aprendendo é isso que tendo a fazer em todas as minhas classes, inicialmente eu faria as validações nos métodos sets e lançaria exceções nos casos onde as validações não passassem e daí utilizaria esses métodos sets no construtor mas como vi que isso não é boa prática agora tendo a criar esses métodos private final que eu posso utilizar tanto nos sets quanto nos construtores evitando assim repetição de código. É esse o caminho ou estou inventando muita coisa?