2014-11-18 13 views
8

Tôi đang sử dụng sự phản chiếu để đặt tất cả các biến thành viên của lớp học thuộc loại Card vào một ví dụ ArrayList<Card>. Làm cách nào để hoàn thành phần cuối cùng này (xem dòng nhận xét bên dưới)?Làm cách nào để truyền trường tới lớp cụ thể bằng cách sử dụng sự phản chiếu trong 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

Tại sao bạn cần sự phản chiếu để truy cập các trường trên 'this'? – rgettman

+0

Tôi muốn nhận mọi lĩnh vực thuộc loại 'Thẻ' – ZakTaccardi

Trả lời

13

Field chỉ là mô tả về lĩnh vực này, nó không phải là giá trị chứa trong đó.

Bạn cần phải đầu tiên nhận được giá trị, và sau đó bạn có thể bỏ nó:

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

Ngoài ra, bạn có thể muốn cho phép các lớp con là tốt, vì vậy bạn nên làm

// 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); 
Các vấn đề liên quan