Учебник API Java Reflection с примером

Что такое Reflection в Java?

Java Reflection – это процесс анализа и модификации всех возможностей класса во время выполнения. API Reflection в Java используется для управления классом и его членами, которые включают в себя поля, методы, конструктор и т. Д. Во время выполнения.

Одним из преимуществ API отражения в Java является то, что он может манипулировать и частными членами класса.

Пакет java.lang.reflect предоставляет множество классов для реализации отражения java.Methods класса java.lang.Class используется для сбора полных метаданных определенного класса.

В этом уроке вы узнаете,

Класс в java.lang.reflect Пакет

Ниже приведен список различных классов Java в java.lang.package,

  • Поле . Этот класс используется для сбора декларативной информации, такой как тип данных, модификатор доступа, имя и значение переменной.
  • Метод . Этот класс используется для сбора декларативной информации, такой как модификатор доступа, тип возврата, имя, типы параметров и тип исключения метода.
  • Конструктор : этот класс используется для сбора декларативной информации, такой как модификатор доступа, имя и типы параметров конструктора.
  • Модификатор : этот класс используется для сбора информации о конкретном модификаторе доступа.

Методы, используемые в java.lang.Class

  • Public String getName () : возвращает имя класса.
  • public Class getSuperclass () : возвращает ссылку суперкласса
  • Открытый класс [] getInterfaces () : возвращает массив интерфейсов, реализованных указанным классом
  • Public in getModifiers (): возвращает целочисленное значение, представляющее модификаторы указанного класса, которые необходимо передать как параметр для метода public public String toString (int i), который возвращает спецификатор доступа для данного класса.

Как получить полную информацию о классе

Чтобы получить информацию о переменных, методах и конструкторах класса, нам нужно создать объект класса.

 

  • В следующем примере показаны различные способы создания объекта класса “class”:

Пример 1: Как получить метаданные класса

В следующем примере показано, как получить метаданные, такие как: имя класса, имя суперкласса, реализованные интерфейсы и модификаторы доступа класса.

Мы получим метаданные ниже класса с именем Guru99Base.class:

 

  1. Название класса: Guru99Base
  2. Модификаторы доступа: публичные и абстрактные
  3. Он реализовал интерфейсы: Serializable и Cloneable
  4. Поскольку он явно не расширил какой-либо класс, это суперкласс: java.lang.Object

Ниже класс получит метаданные Guru99Base.class и распечатает его:

 

  1. напечатать имя класса с помощью метода getName
  2. Распечатайте имя суперкласса с помощью метода getSuperClass (). GetName ()
  3. Распечатайте имя реализованных интерфейсов
  4. Распечатайте модификаторы доступа, используемые классом

Пример 2. Как получить метаданные переменной

Следующие примеры показывают, как получить метаданные переменной:

Здесь мы создаем класс с именем Guru99VariableMetaData .class с некоторыми переменными:

 

Шаги для получения метаданных об переменных в вышеприведенном классе:

  1. Создайте объект класса указанного класса, например Guru99VariableMetaData.class, как показано ниже:

  1. Получите метаданные в форме массива полей, используя методы getFields ()или getDeclaredFields (), как показано ниже:

 

Метод getFields () возвращает метаданные общедоступной переменной из указанного класса, а также из его суперкласса.

Метод getDeclaredFields () возвращает метаданные всех переменных только из указанного класса.

  1. Получите имя переменных, используя метод public String getName ().
  2. Получите тип данных переменных, используя метод public class getType ().
  3. Получите значение переменной, используя метод public xxx get (Field).

Здесь xxx может быть байтом или меньше любого типа значения, которое мы хотим извлечь.

  1. Получите модификаторы доступа переменных, используя методы getModifier () и Modifier.toString (int i).

 

Здесь мы пишем класс для получения метаданных переменных, присутствующих в классе Guru99VariableMetaData .class:

 

    1. Созданный объект класса для Guru99VariableMetaData.class

 

    1. Получил все метаданные переменных в массиве Field

 

    1. Отпечатано все имена переменных в классе Guru99VariableMetaData.class

 

    1. Распечатал все типы данных переменных в классе Guru99VariableMetaData.class

 

    1. Распечатал все модификаторы доступа переменных в классе Guru99VariableMetaData.class

 

    1. Отпечатанные значения всех переменных в Printed всех типов данных переменных в классе Guru99VariableMetaData.class

 

Пример 3: Как получить метаданные метода

В следующих примерах показано, как получить метаданные метода: Здесь мы создаем класс с именем Guru99MethodMetaData .class с некоторыми методами

Шаги для получения метаданных о методах в вышеприведенном классе:

  1. Создайте объект класса указанного класса, например Guru99MethodMetaData.class, как показано ниже:

  1. Получите информацию о методе в массиве Method, используя методы getMethods () и getDeclaredMethods (), как показано ниже:

Метод getMethods () возвращает метаданные общедоступных методов из указанного класса, а также из его суперкласса.

Метод getDeclaredMethods () возвращает метаданные всех методов только из указанного класса.

  1. Получите имя метода, используя метод getName ().
  2. Получите возвращаемый тип метода, используя метод getReturnType ().
  3. Получите модификаторы доступа методов, используя методы getModifiers ()и toString (int i) .
  4. Получить типы параметров метода, используя метод getParameterTypes (),который возвращает массив классов.
  5. Получите исключение броска,используя метод getExceptionTypes (), который возвращает массив классов.

Здесь мы пишем класс для получения метаданных методов, присутствующих в классе Guru99MethodMetaData.class:

  1. Создан объект класса для Guru99MethodMetaData.class
  2. Получил все метаданные всех методов в массиве Method
  3. Отпечатано все имена методов, присутствующие в классе Guru99MethodMetaData.class
  4. Печатные возвращаемые типы методов в классе Guru99MethodMetaData.class
  5. Распечатал все модификаторы доступа методов в классе Guru99MethodMetaData.class
  6. Печатные типы параметров методов в Guru99MethodMetaData.class
  7. Печатные исключения выбрасываются методами в Guru99MethodMetaData.class

Пример 4: Как получить метаданные конструкторов

В следующих примерах показано, как получить метаданные конструкторов:

Здесь мы создаем класс с именем Guru99Constructor.class с разными конструкторами:

Здесь мы пишем класс для получения метаданных конструкторов, присутствующих в классе Guru99Constructor.class:

  1. Созданный объект класса для Guru99Constructor.class
  2. Получил все метаданные всех конструкторов в массиве Конструктор
  3. Отпечатано все имена конструктора, присутствующие в классе Guru99Constructor.class
  4. Распечатал все модификаторы доступа конструкторов в классе Guru99Constructor.class
  5. Печатные типы параметров конструкторов в Guru99Constructor.class
  6. Печатные исключения бросаются конструкторами в Guru99Constructor.class

Резюме:

  • Программирование рефлекса в java помогает в получении и изменении информации о классах и членах класса такой переменной, методах, конструкторах.
  • API Reflection в Java можно реализовать с помощью классов в пакете java.lang.reflect и методах класса java.lang.Class.
  • Некоторые обычно используемые методы класса java.lang.Class: getName (), getSuperclass (), getInterfaces (), getModifiers () и т. Д.
  • Некоторые обычно используемые классы в пакете java.lang.reflect – это поле, метод, конструктор, модификатор и т. Д.
  • API Reflection может обращаться к приватным методам и переменным класса, которые могут представлять угрозу безопасности.
  • Reflection API – это мощная возможность, предоставляемая Java, но она связана с некоторыми накладными расходами, такими как более низкая производительность, уязвимость системы безопасности и разрешение. Следовательно, API отражения следует рассматривать как последнее средство для выполнения операции.
0 ответы

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *