Enum com efeito de metodo - é possível?

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"); } };

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.

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

[quote=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"); } }; [/quote]
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.

[quote=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"); } }; [/quote]

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

[code]public enum EnumRevista{
DIRETORIO.XML (new File(“c:/dir/revista”));

private EnumRevista(File file){

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

};

}
[/code]

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.