Instanciando um ENUM

2 respostas
O

Amigos eu tenho um enum de

enum Status {
ABERTO(1),
CONCLUIDO(2),
CANCELADO(3),
:
}

que eu salvo o valor 1,2,3 por exemplo no banco. Minha duvida qual o metodo que eu recebendo este valor (1,2,3) eu instacie a opcao correspondente de meu enum ?? o
Status.valueOf(Status.class, “ABERTO”) tem o nome mas que quero pelo codigo (1)

Obrigado

2 Respostas

nel

Oi!

Não se instancia ENUM meu camarada.
Poste o seu ENUM completo, por favor.

De qualquer forma, fica aqui a sugestão:

public class TestClass {
	public static void main(String[] args) throws ParseException {
		System.out.println(Status.ABERTO.getCode());
		System.out.println(Status.getStatusByCode(2));
		System.out.println(Status.getStatusByDescription("Cancelado"));
	}
	
	enum Status {
		ABERTO(1, "Aberto"),   
		CONCLUIDO(2, "Concluido"),   
		CANCELADO(3, "Cancelado");

		private Status(int code, String description) {
		    this.code = code;
		    this.description = description;
		}

		private int code;
		private String description;
		
		public int getCode() {
			return code;
		}
		
		public void setCode(int code) {
			this.code = code;
		}
		
		public String getDescription() {
			return description;
		}
		
		public void setDescription(String description) {
			this.description = description;
		}
		
		public static Status getStatusByCode(int code) {
			for(Status status : Status.values()) {
				if(status.getCode() == code)
					return status;
			}
			throw new IllegalArgumentException("Code " + code + " is not valid!");
		}
		
		public static Status getStatusByDescription(String description) {
			for(Status status : Status.values()) {
				if(status.getDescription().equalsIgnoreCase(description))
					return status;
			}
			throw new IllegalArgumentException("Description " + description + " is not valid!");
		}
	}
}

Abraços.

Ataxexe

No banco você pode gravar o ordinal do enum (mantido pelo java) ou a String dele.

Se usar JPA nem se preocupe com isso, apenas use a anotação @Enumerated que o JPA se encarrega disso pra você.

Sem o JPA, use os métodos valueOf(String) e values()[ordinal].

Criado 2 de agosto de 2011
Ultima resposta 2 de ago. de 2011
Respostas 2
Participantes 3