2014-11-18 11 views
8

Sınıfımın tüm üye değişkenlerini Card sınıfının bir ArrayList<Card> örneğine koymak için yansıma kullanıyorum. Bu son bölümü nasıl bitiririm (aşağıdaki yorumlanmış çizgiye bakınız)?Java'da yansımayı kullanarak belirli bir alana nasıl alan dökümü yapılır?

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

yapmalıyım böylece Bu alandaki alanlara erişmek için neden yansımaya ihtiyacınız var? – rgettman

+0

"Kart" türündeki her alanı almak istiyorum – ZakTaccardi

cevap

13

Field alanın sadece açıklamasıdır, orada bulunan bir değer değil.

Önce değerini almak gerekir ve sonra bunu yayınlayabileceğim:

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

Ayrıca, muhtemelen de alt sınıfları izin vermek istiyor, sen

// 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); 
İlgili konular