Para esclarecer bem a dúvida, um código básico e bem simples de entender.
Exemplo 1
class Dog {
private String name;
public Dog(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
}
Agora com o modelo de set.
Exemplo 2:
[code]class Dog {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}[/code]
Bom, uma diferença óbvia nesse caso é que no exemplo do construtor só posso setar o campo name via construtor e no exemplo 2 via set.
Ambos obrigam que você tenha uma instancia do Objeto, nisso, não se altera.
Eu não gosto do exemplo 1 quando temos muitos atributos, o que eu diria que acima de 4 são muitos já. Passa a ter um construtor longo e etc, mas isso é questão minha, particular. Por isso, alguém saberia me explicar no Java se existe uma diferença técnica entre eles? Desempenho, qualidade de código, entre outros…
Talvez, em determinadas situações um exemplo se aplique melhor que o outro, só não consigo enxergar tal cenário.
Bom, é isso. Espero ter sido claro.
O questionamento é porque já vi ambos modelos sendo aplicados, seja em sistemas e/ou exemplos em livros entre outros.
Bom dia nel eu particularmente trabalho tanto com o construtor e com o metodo set, pois quando instancio um objeto qualquer que foi definido um construtor explicito para ele eu garanto que irei passar todos os atributos, sem pedigo de esquecer, pois se caso eu esquecer será impossivel compilar, e quando à necessidade de se alterar algum atributo eu utilizo o set, na minha opiniao mesmo eles tendo quase as mesmas funções, é ideal usar tanto um quanto outro.
lsjunior, não havia prestado atenção na questão do objeto torna-se imutavél, afinal, para que haja uma modificação de valor, eu preciso criar um novo objeto (instancia) e não simplesmente modificar um já existente.
Sendo assim, creio que o resultado final depende de análise, se é necessário ou não que o objeto seja imutavél.
Muito obrigado a todos que opinaram.
O construtor também garante a obrigatoriedade do atributo. Note que no primeiro caso, mesmo que você tivesse um set, o usuário ainda seria obrigado a informar um nome de cachorro para começar a usar a classe.
Isso é especialmente importante para atributos que não podem ser nulos, ou tem que respeitar um determinado intervalo, e não tem um valor padrão que vc mesmo possa atribuir.