2014-11-18 7 views
8

Używam refleksji, aby umieścić wszystkie zmienne składowe mojej klasy należące do klasy Card w instancji ArrayList<Card>. Jak zakończyć tę ostatnią część (patrz skomentowana linia poniżej)?Jak rzucić pole do określonej klasy za pomocą odbicia w 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

Dlaczego potrzebujesz refleksji, aby uzyskać dostęp do pól na "tym"? – rgettman

+0

Chcę uzyskać każde pole typu "Karta" – ZakTaccardi

Odpowiedz

13

Field jest tylko opis tej dziedzinie, nie jest to wartość zawartych tam.

trzeba najpierw uzyskać wartość, a następnie można go obsada:

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

Ponadto, prawdopodobnie chcesz, aby umożliwić podklasy, tak więc należy zrobić

// 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); 
Powiązane problemy