Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Um construtor serve como setter?

Um construtor serve como setter para atributos de uma classe com modificador private? Por exemplo:

public class Pessoa{
    private String nome;
    private int idade;

    public Pessoa(String nome, int idade){
        this.nome = nome;
        this.idade = idade;
    }
}

Obrigado!

2 respostas
solução!

De certa forma sim, você vai conseguir passar parâmetros pra dentro do objeto conforme você está fazendo, é uma abordagem totalmente válida e muito usada.

Geralmente, todos os valores obrigatórios da classe são passados no construtor, sem que haja a necessidade da criação de um setter específico.

Boa noite Davi, tudo bem?

Um construtor é chamado logo após a criação do seu objeto, então no seu exemplo você tem um construtor com dois parametros, como você não tem outro construtor toda vez que você instanciar a classe Pessoa você terá que passar como argumento esses dois parametros obrigatoriamente. Exemplo:

Pessoa pessoa = new Pessoa("Davi", 22);

Se você tivesse setters ao invés de construtor você faria assim:

Pessoa pessoa = new Pessoa();
pessoa.setNome("Davi");
pessoa.setIdade(22);

Agora vamos ver as vantagens e desvantagens dessas abordagens.

Caso você use o construtor você obriga que quem for instanciar a classe Pessoa passe como parâmetro essas duas informações (nome e idade) o que em várias situações é algo legal, pois se pararmos para pensar não existe uma pessoa sem nome ou sem idade certo? Então é legal não permitirmos que alguém instancie nossa classe sem passar esses parâmetros. Uma desvantagem é que só é possível setar essas informações uma vez, dado que o objeto só passa uma vez pelo construtor (quando ele é criado), o uso de apenas construtores é bastante usado para quando você quer criar objetos imutáveis.

No caso de você preferir usar o setter, você ganha como vantagem poder setar varias vezes os valores dos atributos do seu objeto, pode mudar o nome de Davi para João, Marcos e assim vai, mas você não consegue garantir que uma objeto Pessoa seja criado com nome e com idade por exemplo, usando apenas o setter nada impede de alguém chegar e fazer só isso

Pessoa pessoa = new Pessoa();

Ou você pode usar ambos, ter na mesma classe setters e construtores, para que você ganhe as vantagens dos construtores e ganhe as vantagens dos setters, se isso fizer sentido para sua lógica claro.

Espero ter te ajudado, bons estudos!