Reflection API
Рефлексия (от позднелатинского reflexio - обращение назад) - это механизм исследования данных о программе во время её выполнения. Рефлексия позволяет исследовать информацию о полях, методах и конструкторах классов. Можно также выполнять операции над полями и методами которые исследуются.
1. Класс Class
Класс с именем Сlass
представляет характеристики класса, экземпляром которого является объект.
Он предоставляет информацию:
- является ли класс интерфейсом, массивом или примитивным типом;
- каков супер класс объекта;
- каково имя класса;
- какие в нем конструкторы, поля, методы и вложенные классы.
В классе Сlass
нет конструкторов. Экземпляр этого класса создается исполняющей системой Java во время загрузки класса и предоставляется методом getClass()
класса Object
.
Пример 1. Использования класса Class.
public class ClassDemo1 {
public static void main(String[] args) {
getClassName1();
getClassName2();
getClassName3();
}
private static void getClassName1() {
String s = "Это строка";
Class aClass = s.getClass();
System.out.println(aClass);
}
private static void getClassName2() {
try {
Class aClass = Class.forName("java.lang.String");
System.out.println(aClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private static void getClassName3() {
Class aClass = String.class;
System.out.println(aClass);
}
}
Пример 2. Использования класса Class.
import java.io.Serializable;
public class ClassDemo2 {
public static void main(String[] args) {
int[] array = new int[4];
printInfo(array.getClass());
printInfo(Serializable.class);
printInfo(Integer.class);
printInfo(double.class);
}
private static void printInfo(Class arrayClass) {
System.out.println("Class name " + arrayClass.getName());
System.out.println("Is Array? " + arrayClass.isArray());
System.out.println("Is Interface? " + arrayClass.isInterface());
System.out.println("Is Primitive? " + arrayClass.isPrimitive());
System.out.println();
}
}
Пример 3. Использования класса Class.
import java.util.Arrays;
public class ClassDemo3 {
public static void main(String[] args) {
Class heavyBoxClass = HeavyBox1.class;
System.out.println("Declared Constructors: "
+ Arrays.toString(heavyBoxClass.getDeclaredConstructors()));
System.out.println("Constructors: "
+ Arrays.toString(heavyBoxClass.getConstructors()));
System.out.println("Declared Methods: "
+ Arrays.toString(heavyBoxClass.getDeclaredMethods()));
System.out.println("Methods: "
+ Arrays.toString(heavyBoxClass.getMethods()));
System.out.println("Declared Fields: "
+ Arrays.toString(heavyBoxClass.getDeclaredFields()));
System.out.println("Fields: "
+ Arrays.toString(heavyBoxClass.getFields()));
}
}
2. Методы класса Class
getSuperclass()
- возвращает супер класс объекта ссылочного типа.getPackage()
- возвращает пакет.getModifiers()
- возвращает модификаторы класса.
Логические методы позволяющие уточнить, является ли объект массивом, интерфейсом или примитивным типом.
isArray()
isInterface()
isPrimitive()
Если объект ссылочного типа, то можно извлечь сведения о вложенных классах, конструкторах, методах в виде массива:
getDeclaredClasses()
getDeclaredConstructors()
getDeclaredMethods()
getDeclaredFields()
Методы возвращают такие же массивы, но не всех, а только открытых членов класса.
getClasses()
getConstructors()
getMethods()
getFields()
Please log in or register to have a possibility to add comment.