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

Inicializar no construtor ou não???

Boa noite, gostaria de saber qual seria a diferença em inicializar uma lista no construtor ou direto na classe:

public class Teste {

    private List<String> lista = new ArrayList<>();

    private List<String> lista2;

    public Teste(){
        lista2 = new ArrayList<>();
    }

}

Nesse código, utilizo as 2 formas, gostaria de saber se existe alguma diferença, e se existe alguma boa prática em relação a isso?

Obrigado.

3 respostas

Olá Felipe, acredito que na prática, tanto faz. No entanto, no construtor, ficaria mais semântico.

solução!

Olá Felipe, concordo com o Emerson, no cenário apresentado em seu exemplo tanto faz. Só que temos que tomar alguns cuidados: - ao inicializar somente no construtor, principalmente quando existe mais que um, não podemos esquecer de colocar a inicialização nos demais; - dependendo do uso da classe, talvez seja desnecessário adicionar uma lista na memória (aí tanto faz se instanciar na classe ou no construtor); - caso não vá fornecer o método set() do atributo, deve ser inicializado na classe, no construtor ou no get() (excluindo os casos onde se trata de uma lista para uso interno da classe, sem get());

Isso é bem particular do problema que queira resolver, não existe uma regra.

Ainda temos um outro cenário muito comum:

public class Teste {

    private List<String> lista2;

    public List<String> getLista2() {
        if (this.lista2 == null) {
            this.lista2 = new ArrayList<>();
        }
        return this.lista2;
    }
}

Oi Felipe, tudo bem? Uma dica, incrementando com a resposta dos amigos de cima, sempre crie um construtor cheio (com todos os atributos) e um vazio (caso não seja obrigatória a função)