Java for Beginner
675 subscribers
558 photos
156 videos
12 files
856 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Получение информации о полях.

Поле класса — это переменная, объявленная внутри класса. Оно может быть статическим или нестатическим, публичным, приватным или защищенным. Reflection API позволяет получать информацию о полях класса, включая их типы, модификаторы и значения.

Получение полей класса

getFields()
Возвращает массив всех публичных полей класса, включая унаследованные от суперклассов.

Пример:
import java.lang.reflect.Field;

class Parent {
public String parentField = "Parent Field";
}

class Child extends Parent {
public String childField = "Child Field";
private int privateField = 42;
}

public class Main {
public static void main(String[] args) {
Class<?> clazz = Child.class;
Field[] fields = clazz.getFields();
for (Field field : fields) {
System.out.println("Field: " + field.getName()); // Вывод: parentField, childField
}
}
}


getDeclaredFields()
Возвращает массив всех полей, объявленных в классе, включая приватные и защищенные, но не включает унаследованные поля.

Пример:
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
System.out.println("Declared Field: " + field.getName()); // Вывод: childField, privateField
}


Работа с модификаторами полей


getModifiers()

Возвращает модификаторы поля в виде целого числа. Для расшифровки используется класс Modifier.

Пример:
Field privateField = clazz.getDeclaredField("privateField");
int modifiers = privateField.getModifiers();
System.out.println("Is Private: " + Modifier.isPrivate(modifiers)); // Вывод: true
System.out.println("Is Static: " + Modifier.isStatic(modifiers)); // Вывод: false


getType()
Возвращает тип поля в виде объекта Class.

Пример:
Class<?> fieldType = privateField.getType();
System.out.println("Field Type: " + fieldType.getName()); // Вывод: int


#Java #Training #Medium #Reflection_API #Field
Получение информации о полях. Часть 2

Пример получения информации о полях

Рассмотрим более сложный пример, где мы получаем информацию о всех полях класса, включая их типы и модификаторы.
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

class Example {
public String publicField = "Public Field";
private int privateField = 42;
protected static final double PROTECTED_FIELD = 3.14;
}

public class Main {
public static void main(String[] args) throws Exception {
Class<?> clazz = Example.class;

// Получаем все поля (публичные и унаследованные)
Field[] fields = clazz.getFields();
System.out.println("Public Fields:");
for (Field field : fields) {
System.out.println(" Name: " + field.getName());
System.out.println(" Type: " + field.getType().getName());
System.out.println(" Modifiers: " + Modifier.toString(field.getModifiers()));
}

// Получаем все объявленные поля (включая приватные и защищенные)
Field[] declaredFields = clazz.getDeclaredFields();
System.out.println("Declared Fields:");
for (Field field : declaredFields) {
System.out.println(" Name: " + field.getName());
System.out.println(" Type: " + field.getType().getName());
System.out.println(" Modifiers: " + Modifier.toString(field.getModifiers()));
}
}
}


Вывод программы
Public Fields:
Name: publicField
Type: java.lang.String
Modifiers: public
Declared Fields:
Name: publicField
Type: java.lang.String
Modifiers: public
Name: privateField
Type: int
Modifiers: private
Name: PROTECTED_FIELD
Type: double
Modifiers: protected static final


Нюансы использования

Доступ к приватным полям:
По умолчанию приватные поля недоступны через getFields(). Для доступа к ним нужно использовать getDeclaredFields() и вызвать метод setAccessible(true).

Пример:
Field privateField = clazz.getDeclaredField("privateField");
privateField.setAccessible(true); // Разрешаем доступ к приватному полю
System.out.println("Private Field Value: " + privateField.get(new Example())); // Вывод: 42


Статические поля:

Для получения значения статического поля можно передать null в метод get().

Пример:
Field staticField = clazz.getDeclaredField("PROTECTED_FIELD");
staticField.setAccessible(true);
System.out.println("Static Field Value: " + staticField.get(null)); // Вывод: 3.14


#Java #Training #Medium #Reflection_API #Field