Como pegar tipo generico de uma collection por reflection?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
mchiareli
JavaEvangelist
[Avatar]

Membro desde: 04/04/2006 15:14:50
Mensagens: 397
Offline

Tenho uma classe:



eu preciso verificar quais os atributos desta classe é marcada com a annotation @Atributo, mas essa classe esta em um ArrayList em outra classe, por exemplo:



Como eu pegaria a classe que <Dispositivo> que esta no ArrayList...

se eu usar o metodo getGenericType() ele me retorna um Type:

java.util.ArrayList<Dispositivo>

oque eu podeira fazer, pq eu não terei certeza da classe que está no array.

codifica.wordpress.com
[WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

mchiareli wrote:
o que eu podeira fazer, pq eu não terei certeza da classe que está no array.


Ora, se você tem um List<Dispositivo> e não fez nenhum cast que causou warning, deve ter apenas objetos da classe Dispositivo ou de suas subclasses.


[WWW]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

mchiareli wrote:
oque eu podeira fazer, pq eu não terei certeza da classe que está no array.



Não tem como fazer isso que vc quer pq os tipos são apagados depois da compilação. Eles não ficam no codigo como os annotations, por isso não tem como usar reflection.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
mchiareli
JavaEvangelist
[Avatar]

Membro desde: 04/04/2006 15:14:50
Mensagens: 397
Offline

mas eu nao vou saber qual o tipo generico declarado, esse foi um exemplo simples apenas....

codifica.wordpress.com
[WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Ou seja: você não consegue saber se o objeto é da classe Dispositivo sem usar um "instanceof" em tempo de execução. De qualquer maneira, você pode chamar, para cada membro da classe do objeto, o método getAnnotations() ou isAnnotationPresent()
[WWW]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

Veja:



Deu para entender ? Na verdade não precisa de saber qual é a classe de T

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
mchiareli
JavaEvangelist
[Avatar]

Membro desde: 04/04/2006 15:14:50
Mensagens: 397
Offline

sergiotaborda wrote:Veja:



Deu para entender ? Na verdade não precisa de saber qual é a classe de T


deu pra entender sim kra.....mas eu tenho um Field que representa uma collection

como eu pego a collection em sim que eh representado por esse field para interar sobre ela para verificar os atributos nos objetos que estão nela??

tipo tenho um field

Field field
field.getType() = ArrayList;

blz....

como eu tenho acesso aos objetos dentro deste arraylist??

codifica.wordpress.com
[WWW] [MSN]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline



deu pra entender sim kra.....mas eu tenho um Field que representa uma collection

como eu pego a collection em sim que eh representado por esse field para interar sobre ela para verificar os atributos nos objetos que estão nela??

tipo tenho um field

Field field
field.getType() = ArrayList;


como eu tenho acesso aos objetos dentro deste arraylist??



Ah! Bom , isso é só fazer ...



onde field é o campo obtido dos metados e instancia é um objeto da classe em causa. E depois usa o outro código que falei.
Isto só funciona se vc tiver um objeto da classe.
Se não tiver, ou se quiser usar apenas os metadados, o que vc quer fazer não é possivel. A solução nesse caso seria criar um anotação que especifica a classe , ou super-classe, dos itens na lista algo assim



A funcionalidade disto é limitada,pois obriga T a ser de uma certa classe,o que pode não ser possivel/desejável. Dependendo do que vc está tentando fazer pode ser a solução ou não.

Criando sua própria API de Validação



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