Enum com efeito de metodo - é possível?

4 respostas
M

oi. e possivel criar um enum que ao chamar tem funcao de metodo tambem por exemplo ao chamar o EnumRevista.DIRETORIO_XML caso o diretorio nao existisse ja criaria…

tentei mais sem sucesso

public enum EnumRevista{ DIRETORIO.XML { @Override public void verificarSeODiretorioExisteSeNaoExistirIraCriar() { new File("c:/dir/revista"); } };

4 Respostas

A

Até tem como criar um construtor para enum (que seria mais ou menos que você quer: um método para rodar na criação).

Mas isso não seria uma boa idéia.

Quando você lê uma enum, você quer apenas ler, ninguém espera que ler o valor de enum saia criando coisas.
Evite colocar coisas escondidas assim no seu código. Isso dificulta a manutenção depois.

Coloque essas validações numa classe separada (especialmente quando tem criação de arquivos envolvida) e defina um lugar na aplicação para esse setup rodar.

Edit: corrigindo informação.

Hebert_Coelho

Você pode criar como método uai… Você pode criar métodos normalmente…

R

mariazinhahappy:
oi. e possivel criar um enum que ao chamar tem funcao de metodo tambem por exemplo ao chamar o EnumRevista.DIRETORIO_XML caso o diretorio nao existisse ja criaria…

tentei mais sem sucesso

public enum EnumRevista{ DIRETORIO.XML { @Override public void verificarSeODiretorioExisteSeNaoExistirIraCriar() { new File("c:/dir/revista"); } };


Eu sei que não têm nada a ver. mas esse método realmente se chama verificarSeODiretorioExisteSeNaoExistirIraCriar , prq se for acho melhor vc rever alguns padrões de nomes para criação de método,talvez apenas criarDiretorio e um comentario do que ele faz já ajuda muito.

sergiotaborda
mariazinhahappy:
oi. e possivel criar um enum que ao chamar tem funcao de metodo tambem por exemplo ao chamar o EnumRevista.DIRETORIO_XML caso o diretorio nao existisse ja criaria......

tentei mais sem sucesso

public enum EnumRevista{  
    DIRETORIO.XML {  
        @Override public void verificarSeODiretorioExisteSeNaoExistirIraCriar() {  
        	new File("c:/dir/revista");
        }  
    };

O problema não é enum, o problema é entender como funciona File. Vc tem que verificar se existe e mandar criar se não existe. Não é mágico. O file só aponta o local do arquvio e não o arquivo em si.

É sim possível criar construtores para enum, mas eles têm que ser private.

O codigo seria assim

public enum EnumRevista{  
    DIRETORIO.XML (new File("c:/dir/revista"));


   private EnumRevista(File file){  

       if (!file.exists()){
             file.mkdirs();
       }
   };

}

Contudo é uma péssima prática usar caminhos explícitos no código , porque por exemplo se rodar no linux quebra tudo.

Já falamos disto aqui no guj recentemente. Não coloque configuração de caminho como constante no codigo. O que significa que usar enum para isso tb não é boa ideia.

Criado 23 de janeiro de 2013
Ultima resposta 24 de jan. de 2013
Respostas 4
Participantes 5