Enum avançado e difícil. Alguém?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

Coloquei o tópico para ver se algum guru me ajuda aqui.

Tenho uma classe que descreve um tipo no banco de dados. O que quero fazer é suportar um tipo Enum, ou seja:

Quando lê do banco, converte a String para o Enum correspondente, ou seja, se leu "F", converte para o enum Category.Type.F.

Quando vai inserir no banco, converte o Enum para a String correspondente, ou seja, se o enum é Category.Type.F converte para "F".

Abaixo está a minha classe para Strings. Como eu escreveria algo similar para Enums ?

A dificuldade é que eu tenho que passar a classe do meu Enum para dentro do meu EnumType para poder converter de String para Enum e vice versa. Não sei se passo via Generics (Ex: EnumType<Category.Type> e não sei se passa via parametro do constructor (Ex: new EnumType(Category.Type.class)).




This message was edited 1 time. Last update was at 13/03/2011 21:21:37


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
duardor
Virtual Machine Man
[Avatar]

Membro desde: 04/12/2002 16:26:48
Mensagens: 556
Localização: BRAZIL
Offline

Dê uma olhada no TypeHandler para enums do iBatis, ele faz mais ou menos isso dai que vc quer, passando o tipo no construtor.. Deve dar pra vc basear como exemplo
http://www.docjar.com/html/api/com/ibatis/sqlmap/engine/type/EnumTypeHandler.java.html
E pra transformar de Enum para String vc nao precisa saber da classe, basta um .name() (ou .toString() no default) com a instancia que vc tem em mãos certo?

Eduardo Rodrigues
Belo Horizonte - MG
[Email] [MSN] [ICQ]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

duardor wrote:Dê uma olhada no TypeHandler para enums do iBatis, ele faz mais ou menos isso dai que vc quer, passando o tipo no construtor.. Deve dar pra vc basear como exemplo
http://www.docjar.com/html/api/com/ibatis/sqlmap/engine/type/EnumTypeHandler.java.html
E pra transformar de Enum para String vc nao precisa saber da classe, basta um .name() (ou .toString() no default) com a instancia que vc tem em mãos certo?


Muito obrigado! Ajudou bastante. Dá para perceber que o MentaBean é muito parecido com o iBatis.

Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

putz os caras estão num nível completamente diferente do meu xD, to pelejando pra entender esse negócio! mas um dia chego lá!!!
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

Tanto o Hibernate quanto o iBatis não usam Generics direito. Pelo menos é o que parece. O iBatis ignora generics e o Hibernate faz algo assim:



Quando eu acho que deveria ser:


Fonte: http://www.docjar.com/html/api/org/hibernate/type/EnumType.java.html

Usando a declaração correta logo acima, eu estou recebendo um warning de generics pentelho aqui:



Como vc pode ver estou tendo que fazer um cast se não não rola. O código completo está abaixo.

Alguém saberia dizer se é possível e se for como fazer essa classe ficar redondinha com generics para enums? Parece que nem os caras do iBatis e Hibernate sabem fazer isso. :-|


This message was edited 2 times. Last update was at 15/03/2011 03:32:28


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team