Поля класса в Java
После получения Class можно спросить, какие поля
объявлены в типе. Каждый элемент списка имеет тип
Field с именем, типом значения и модификаторами
доступа.
Метод getDeclaredFields возвращает все поля,
объявленные в самом классе, включая закрытые. Имена
удобно печатать через getName:
class Ledger {
private String code;
private int balance;
Ledger(String code, int balance) {
this.code = code;
this.balance = balance;
}
}
public class Main {
public static void main(String[] args) {
for (var field : Ledger.class.getDeclaredFields()) {
System.out.println(field.getName());
}
}
}
Метод getFields показывает только открытые поля,
в том числе унаследованные от родителя. Для типа без
публичных полей список может оказаться пустым, хотя
закрытые поля в классе есть:
class Ledger {
private String code;
}
public class Main {
public static void main(String[] args) {
System.out.println(Ledger.class.getFields().length);
System.out.println(Ledger.class.getDeclaredFields().length);
}
}
На практике для своего класса чаще берут
getDeclaredFields, когда нужен полный перечень
объявлений. getFields полезен, если интересуют
только открытые члены, видимые снаружи и у предков.
Опишите класс Widget с двумя закрытыми полями
и одним публичным. Выведите имена из
getDeclaredFields и количество элементов
из getFields.