Reflection API в Java. Класс Method. Часть 3

FacebooktwittertumblrFacebooktwittertumblr

Данная статья:

  • написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
  • это одна из статей из нашего "Самоучителя по Java" 
  • Данная статья предполагает, что Вы уже хорошо знаете ООП.

Эта статья является ответвлением от статьи Reflection API в Java, Часть 1, где мы узнали как получить Method из класса Class.

В этой статье вы узнаете как работать с классом Method.

Класс Method

Класс Method предоставляет возможность:

  • получить название метода, его модификаторы, тип возвращаемого значения и входящих параметров
  • получить аннотации метода, бросаемые исключения и другую информацию
  • вызвать метод, даже приватный

Для начала, создадим класс Car

Пример 1 Получение названия метода

Пример 2 Получение модификаторов метода

С методами история та же, что и с полями. Для работы с модификаторами метода необходимо воспользоваться методами класса Modifiers

Пример 3 Получение типа возвращаемого значения

Метод getGenericReturnType возвращает параметризованный тип. Лучше всего это видно на следующем примере

Реальный тип возвращаемого значения будет Object т.к. во время исполнения все дженерики являются Object. А вот genericReturnType будет T, как раз тот тип, что мы указали в методе logAndReturn().

Пример 4 Получение аннотаций метода

Для получения аннотаций метода существуют методы : getAnnotations() и getDeclaredAnnotations(), getAnnotationsByType() и getDeclaredAnnotationsByType(), getAnnotation() и getDeclaredAnnotation()

Но, пары методов getAnnotations() и getDeclaredAnnotations(), getAnnotationsByType() и getDeclaredAnnotationsByType(), getAnnotation() и getDeclaredAnnotation() делают одно и то же. Как пример, javadoc для getDeclaredAnnotation():

Поэтому мы рассмотрим только несколько из них.

  • getAnnotations() возвращает массив аннотаций метода
  • getAnnotation() возвращает аннотацию по типу
  • getAnnotationsByType() возвращает массив аннотаций по типу. Метод был добавлен в Java 8 вместе с @Repeatable аннотациями

Пример 5 Получение входящих параметров

  • getParameterCount() возвращает количество входящих параметров
  • getParameters() возвращает массив всех входящих параметров в виде класса Parameter
  • getParameterTypes() возвращает массив типов входящих параметров в виде класса Class
  • getGenericParameterTypes() возвращает массив дженерик входящих типов параметров.
  • getTypeParameters() возвращает массив дженериков входящих типов в виде класса TypeVariable
  • getParameterAnnotations() возвращает массив аннотаций входящих параметров

Пример 6 Получение бросаемых исключений

  • getExceptionTypes() возвращает массив типов исключений, которые могут быть потенциально брошены методом
  • getGenericExceptionTypes() возвращает массив дженериков, которые могут быть потенциально брошены методом

Пример 7 Получение дополнительной информации

  • getDeclaringClass() возвращает класс, в котором объявлено поле
  • isSynthetic() возвращает true, если метод был создан компилятором, а не разработчиком
  • isBridge() возвращает true, если метод является bridge-методом по Java Language Specification (JLS)
  • isDefault() возвращает true, если метод является методом по умолчанию по JLS
  • isVarArgs() возвращает true, если во входящих параметрах метода присутствует varargs

Пример 8 Вызов public метода

Для вызова метода с помощью рефлексии существует метод invoke() который принимает объект на котором будет вызываться этот метод и vararg список входящих параметров

Вызов метода с параметрами выглядит так

Пример 9 Вызов private метода

Как мы уже знаем, доступ ко всему приватному требует вызова setAccessible(true), методы не являются исключением

На этом урок заканчивается

В этом уроке мы узнали:

  • как получить название метода, его модификаторы, тип возвращаемого значения и входящих параметров
  • как получить аннотации метода, бросаемые исключения и другую информацию
  • как вызвать метод, в том числе приватный

Спасибо, что были с нами! 🙂


Надеемся, что наша статья была Вам полезна.  Можно записаться к нам на курсы по Java на сайте.

 

FacebooktwittertumblrFacebooktwittertumblr

FacebooktwittertumblrFacebooktwittertumblr
Самоучители--узнать детальнее--