рефлексия
Рефлексия в Java — это механизм, который позволяет программе анализировать и изменять свою структуру и поведение во время выполнения. С помощью рефлексии можно получать информацию о классах, методах, полях и конструкторах, а также вызывать методы и изменять значения полей, даже если они являются приватными. Основные возможности рефлексии:
Получение информации о классах: С помощью рефлексии можно получить информацию о классе, его методах, полях и конструкторах. Например, можно узнать, какие методы объявлены в классе, какие параметры они принимают и какой тип возвращают.
Динамическое создание объектов: Рефлексия позволяет создавать экземпляры классов во время выполнения, используя конструкторы, даже если тип класса известен только в момент выполнения.
Вызов методов: Можно вызывать методы объектов динамически, не зная их имена на этапе компиляции. Это полезно в ситуациях, когда методы определяются в зависимости от внешних условий.
Изменение полей: Рефлексия позволяет изменять значения полей объектов, даже если они являются приватными. Это может быть полезно для тестирования или в ситуациях, когда необходимо обойти ограничения доступа.
//вот как мы можем использовать класс, и даже приватные поля с помощью рефлексии
Person person = new Person("ddd",25,"77777");
System.out.println(person.getClass().getSimpleName());
Field[] fields = person.getClass().getDeclaredFields();
for (Field field:fields){
System.out.println(field.getName());
}
Method[] methods = person.getClass().getDeclaredMethods();
for (Method method:methods){
System.out.println(method.getName());
method.invoke(person);
}
Field nameField = person.getClass().getDeclaredField("name");
//создаём возможность получать приватные поля через рефлексию
nameField.setAccessible(true);
System.out.println(nameField.get(person));
public class Person {
final private String name;
final int age;
final String phone;
Person(String name, int age, String phone){
this.name = name;
this.age=age;
this.phone=phone;
}
void display(){
System.out.println(name+age+phone);
}
}
короткие примеры: https://gitlab.com/synergy9980417/razdel2/4_1-2 https://gitlab.com/synergy9980417/razdel2/4_3