Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Reflections: анализ модификаторов метода

#java


Мне необходимо выделить из класса protected-методы. Я получаю массив Method[] из
метода Class.getDeclaredMethods(), затем анализирую объекты массива. Есть метод Method.getModifiers(),
который возвращает, как я понимаю, одну из статических констант класса Modifier. Прикол
в том, что у метода модификаторов может быть несколько (типа public static), а у меня
в распоряжении только один. Как так то?
    


Ответы

Ответ 1



Метод getModifiers() возвращает битовую маску — самый простой способ представления множества значений (эдакий EnumSet для бедных). Каждый отдельный модификатор в этой битовой маске — это отдельный бит. Например, public — самый младший (нулевой) бит, private — следующий за ним (первый) и так далее. Чтобы проверять, установлен ли i-й бит в битовой маске, надо проверить на ноль результат операции (modifiers & (1 << n)), где n — это номер бита. Для упрощения обычно для возможных значений (1 << n) заводят подходящие константы, которые как раз есть в классе Modifier: Modifier.PUBLIC = 1 << 0 = 1 Modifier.PRIVATE = 1 << 1 = 2 Modifier.PROTECTED = 1 << 2 = 4 И так далее. Соответственно, чтобы узнать, например, объявлен ли метод protected, надо проверить условие method.getModifiers() & Modifier.PROTECTED != 0. Именно это и делают вспомогательные статические методы в классе Modifier, поэтому можно писать ещё проще: Modifier.isProtected(method.getModifiers()).

Ответ 2



Ой, тьфу, там есть булевы методы типа Modifier.isProtected() и т.п.

Комментариев нет:

Отправить комментарий