2013-05-13 59 views
0

我需要遍歷抽象基類的子類中的公共屬性。我之前使用過反射,但現在我還需要檢索超類中的字段。以下方法僅返回子類中的那些字段,但不返回超類。如何訪問基類的成員呢?如何使用反射循環訪問子類中的字段

private <T> void inspectClass(Class<T> cls){ 
    Field[] fields = cls.getDeclaredFields(); 
    Log.d("FIELDS ARRAY", cls.toString()); 
    for(Field f : fields){ 
     Log.d("FIELD NAME", f.toString()); 
    } 
} 

謝謝!

+0

使用'while(Class#getSuperClass()!= null)'循環父類並獲取它們的字段。 – 2013-05-13 15:50:24

回答

1

有一個getFields方法將返回此類及其超類的所有public字段。

如果您想要此類及其超類的所有字段,請使用getSuperClass()並調用相同的方法。

正如@Sotirios的評論所建議的那樣,您可以繼續在層次結構中一直這樣做。

Class<?> clazz = cls.getSuperclass(); 
    while (clazz != null) { 
     // Print fields. 
     clazz = clazz.getSuperclass(); 
    } 
1

如果您希望獲得班級的所有公共領域,您應該使用getFields。 Java文檔說:

Returns an array containing Field objects reflecting all the accessible public 
fields of the class or interface represented by this Class object. 

herejava.lang.Class的文檔。