Как я буду вызывать метод, использующий отражение в Java, где метод имеет 2 параметра? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь вызвать метод класса Level в Apache log4j, используя отражение, которое имеет 2 значения параметра. Как мне это сделать?

1 Ответ

0 голосов
/ 18 марта 2019

Использование примера с классом Level fron Log4j2.

Следующее вызывает метод isInRange(Level, Level), чтобы определить, находится ли уровень журнала между двумя другими уровнями журнала.

Level warn = Level.WARN;
boolean range = warn.isInRange(Level.ERROR, LEVEL.INFO);

можно сделать с помощью Reflection с:

Level warn = Level.WARN;
Method method = warn.getClass().getMethod("isInRange", Level.class, Level.class);
boolean range = method.invoke(warn, Level.ERROR, Level.INFO);

В этом случае оба аргумента являются Level объектами, поэтому ссылка на класс Level.class используется дважды в getMethod(как типы двух аргументов).

Затем метод вызывается с помощью method.invoke(warn, Level.ERROR, Level.INFO).

Первый аргумент - это экземпляр, для которого мы хотим вызвать метод (в данном случае warn).
Если метод, который мы вызываем, является статическим, null может использоваться.

Вторые два аргумента являются аргументами фактической функции isInRange.

...