2014-11-18 15 views
8

Sto utilizzando la riflessione per inserire tutte le variabili membro della mia classe che sono di tipo Card class in un'istanza ArrayList<Card>. Come posso finire questa ultima parte (vedi la linea commentata sotto)?Come trasmettere il campo a una classe specifica utilizzando reflection in java?

ArrayList<Card> cardList = new ArrayList<Card>(); 
Field[] fields = this.getClass().getDeclaredFields(); 

for (Field field : fields) { 
    if (field.getType() == Card.class) { 
     //how do I convert 'field' to a 'Card' object and add it to the 'cardList' here? 
+0

Perché hai bisogno di una riflessione per accedere ai campi su "questo"? – rgettman

+0

Voglio ottenere ogni campo che è di tipo 'Card' – ZakTaccardi

risposta

13

Field è solo la descrizione del campo, non è il valore contenuto in là.

È necessario prima ottenere il valore, e quindi è possibile cast:

Card x = (Card) field.get(this); 

Inoltre, probabilmente si desidera consentire sottoclassi pure, così si dovrebbe fare

// if (field.getType() == Card.class) { 

    if (Card.class.isAssignableFrom(field.getType()) { 
4
ArrayList<Card> cardList = new ArrayList<Card>(); 
Field[] fields = this.getClass().getDeclaredFields();  

for (Field field : fields) { 
    if (field.getType() == Card.class) { 
     Card tmp = (Card) field.get(this); 
     cardList.add(tmp); 
Problemi correlati