1
resposta

Enums

Boa tarde,

Estava estudando sobre Enums e me deparei com uma exception. Error:(4, 31) java: illegal forward reference.

No caso eu criei um enum de estado de venda de item, onde o mesmo possui um atributo para o proximo estado.

O construtor do enum recebe o estado e indica o próximo porém ao rodar o programa o mesmo lança a excessão acima.

Gostaria de saber se não é possível passar um atributo do próprio enum em seu construtor.

package br.com.renato.enums;

public enum EstadoVendaItem {

    DISPONIVEL(RESERVADO),
    RESERVADO(ADIQUIRIDO),
    ADIQUIRIDO(EM_TRANSPORTE),
    EM_TRANSPORTE(ENTREGUE),
    ENTREGUE(null);

    private EstadoVendaItem proximoEstado;

    private EstadoVendaItem(EstadoVendaItem proximoEstado) {
        this.proximoEstado = proximoEstado;
    }

    public EstadoVendaItem getProximoEstado() {
        return proximoEstado;
    }
}
1 resposta

Olá Renato,

No Java, o construtor de cada enum é chamado na ordem em que são declarados. No seu caso, primeiro ele vai invocar o construtor do DISPONIVEL passando o RESERVADO como parâmetro. Mas nesse momento ainda estamos construindo o DISPONIVEL... o RESERVADO ainda não está pronto para ser passado como parâmetro!

Você pode resolver seu problema apenas mudando a ordem de declaração dos seus enums para que eles já estejam prontos no momento que você precisar deles.

Tente resolver e depois retorne para contar se deu certo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software