Pela mãozinha gorda, acho que é o Moisés. E pelo apelido (nick) de mau gosto, acho que é o Diego.
Mas vamos lá!
O pessoal aqui já disse muito a respeito dos construtores e os seus argumentos e explicaram bem.
Como disseram, pode não ser por "boas práticas", mas sim por conta do modelo de desenvolvimento adotado para o projeto. O que concordo.
Como eu sei que estamos falando do mesmo projeto, neste caso, não vejo como adequado criar N variantes do construtor da classe de uma entidade, o que pode levar ao uso equivocado dessas diferentes variantes.
Em alguns casos, algumas IDEs podem não interpretar corretamente os nomes dos parâmetros, possibilitando erros na implementação.
Exemplo:
public class Pessoa {
String nome;
String cpf;
String email;
public Pessoa() {}
public Pessoa( String nome, String cpf, String email ) {}
public Pessoa( String nome, String cpf ) {}
public Pessoa( String nome, String email ) {} // NÃO COMPILA!!!
}
Além do mais, no auto complete de alguma IDEs, você não consegue saber se os nomes dos argumentos dos construtores. Eles acabam colocando algo como "param1, param2".
Está vendo a possibilidade de problemas que se abrem?
Neste caso, se precisar passar apenas alguns argumentos na criação do objeto, por exemplo, nome e cpf, faça assim:
Pessoa p = new Pessoa( nome, cpf, null );
Fica explícito e é menos suscetível a erros, na minha opinião.
Abraços a todos de Mococa!
Daniel Destro