public Field[] getFields() throws SecurityException
Zwraca tablicę zawierającą obiekty Field odzwierciedlające wszystkie dostępne pola publiczne klasy lub interfejs reprezentowany przez ten obiekt Class. Zwracane elementy tablicy nie są sortowane i nie mają określonej kolejności. Ta metoda zwraca tablicę o długości 0, jeśli klasa lub interfejs nie ma dostępnych pól publicznych lub jeśli reprezentuje klasę tablicy, typ pierwotny lub void.
W szczególności, jeśli ten obiekt klasy reprezentuje klasę, ta metoda zwraca pola publiczne tej klasy i wszystkich jej nadklas. Jeśli ten obiekt klasy reprezentuje interfejs, ta metoda zwraca pola tego interfejsu i wszystkich jego super interfejsów.
Ta metoda nie uwzględnia pola niejawnej długości dla klasy tablicy. Kod użytkownika powinien używać metod klasy Array do manipulowania tablicami.
public Field[] getDeclaredFields() throws SecurityException
Zwraca tablicę obiektów Field odzwierciedlających wszystkie pola zadeklarowane przez klasę lub interfejs reprezentowany przez ten obiekt Class. Obejmuje to pola publiczne, chronione, domyślne (pakietowe) i prywatne , ale wyklucza pola dziedziczone . Zwracane elementy tablicy nie są sortowane i nie mają określonej kolejności. Ta metoda zwraca tablicę o długości 0, jeśli klasa lub interfejs nie deklaruje żadnych pól lub jeśli ten obiekt klasy reprezentuje typ pierwotny, klasę tablic lub void.
A jeśli potrzebuję wszystkich pól ze wszystkich klas nadrzędnych? Potrzebny jest pewien kod, np. Z https://stackoverflow.com/a/35103361/755804 :
public static List<Field> getAllModelFields(Class aClass) {
List<Field> fields = new ArrayList<>();
do {
Collections.addAll(fields, aClass.getDeclaredFields());
aClass = aClass.getSuperclass();
} while (aClass != null);
return fields;
}
getField
może uzyskać pole dziedziczone z nadklasy, alegetDeclaredField
nie może.getDeclaredField
ogranicz się do klasy, na której wywołujesz funkcję.