Classe ENUM [RESOLVIDO]

Pessoal,

Tenho esta classe ENUM abaixo, e é assim… ela lê uma planilha do excel… só que se possuir dados nas colunas que acima de 15 das 14 definidas, ele manda nulo para verificar no switch case, ai da erro… não estou conseguindo validar esse “furo”

[code]package br.com.simcard.en;

/**

  • Classe: TelecomCelulasEnum
  • Objetvio:
  • Enumerar a planilha recebida como arquivo e tratar as colunas
  • Comentário:
  • Essa classe Enum é utilizada para enumerar as planilhas em Excel recebidas
  • como arquivo da classe VerificarRegistroTelecom.java para manipular os
  • campos das colunas
  • Dos métodos:
    • obterCelulaTelecom(int) recebe o número da coluna e verifica na classe
  • que a chamaar em um CASE qual o número da coluna
    **/

public enum TelecomCelulasEnum {
CARD(0),
LINHA(1),
UTILIZADA(2),
CONTA(3),
OPERADORA(4),
PLANO(5),
STATUS(6),
ATIVACAO(7),
FONTE(8),
STATUS2(9),
IM(10),
CONSUMO(11),
ATO(12),
DATA_ATO(13);

private int nuColuna;

private TelecomCelulasEnum(int nuColuna) {
	this.nuColuna = nuColuna;
}

public static TelecomCelulasEnum obterCelulaTelecom(int nuColuna) {
	TelecomCelulasEnum retorno = null;
	
	for (TelecomCelulasEnum enumTelecom : TelecomCelulasEnum.values()) {
		if (enumTelecom.getNuColuna() == nuColuna) {
			retorno = enumTelecom;
		}
	}
	
	return retorno;
}

public int getNuColuna() {
	return nuColuna;
}

public void setNuColuna(int nuColuna) {
	this.nuColuna = nuColuna;
}

}[/code]

não entendi mto bem a pergunta, mas me parece que voce quer saber pq ta retornando nulo ne?

então, no seu método vc declara a variavel retorno como null, e ela só recebe outro valor se o nuColuna dela for igual ao parametro recebido, verifica se o parametro recebido é >=0 e <=13, se não for o retorno nulo acontece por isso, se o parametro estiver dentro do limite, posta aqui um exemplo de entrada, uma saida esperada e uma saida real.

aqui eu testei e seu código e acho que funcionou como esperado:

public static void main(String[] args) throws Exception { System.out.println(TelecomCelulasEnum.obterCelulaTelecom(2)); } //saída: //UTILIZADA

olá amigo…

É isso… mas eu não sei como tratar… o caso é assim… ele vai até um arquivo excel e enumera as colunas… assim cada coluna represento por um código ai coloco a descrição… que é usada em outra classe no swith case…

eu queria tratar isso, se for um número diferente do enumerado não fazer nada e chamar o próximo… para não ficar enviando nulo para o swith case:

	for (int nuCelulaAtual = 0; nuCelulaAtual < celulas.length; nuCelulaAtual++) {
			Cell celula = celulas[nuCelulaAtual];
			TelecomCelulasEnum celulaTelecom = TelecomCelulasEnum
					.obterCelulaTelecom(nuCelulaAtual);

			switch (celulaTelecom) {
			case CARD:
				linhaTelecom.setSimcard(celula.getContents());
				break;
			case LINHA:
				linhaTelecom.setLinha(celula.getContents());
				break;

Só que quando tem algo na coluna 15 ele não encontra valor e retorna o nulo… queria tratar isso para evitar problema

Consegui…

Coloquei antes do swith case a verificação

if(celulaTelecom !=null){

switch (celulaTelecom) {
case CARD:

:
:
}

Normalmente sobreescrevo e recomendo o método valueOf para ter o resultado do seu método obterCelulaTelecom, pq para objetr um enum a partir de um valor é esse o método a ser utilizado.

No seu for avaliaria

if  (celulaTelecom == null) {
    break;
}

e sairia fora do for antes de chegar no switch.

[]s

Provavelmente o que ele quer é mais isto

    if  (celulaTelecom == null) {  
        continue;  
    }  

Eu coloquei o != de nulo e não faz nada… assim resolveu… pq está dentro do for, assim ele passa sem fazer nada…