Вызов метода в Java
Элемент из списка методов имеет тип Method.
У него есть invoke - универсальный вызов:
первым аргументом передают объект, для статического
метода можно указать null, дальше идут параметры
метода.
У метода экземпляра без параметров достаточно передать объект одним аргументом:
import java.lang.reflect.Method;
class Beacon {
private final String channel;
Beacon(String channel) {
this.channel = channel;
}
String ping() {
return "on:" + channel;
}
}
public class Main {
public static void main(String[] args) throws Exception {
Method pingFn = Beacon.class.getDeclaredMethod("ping");
Beacon unit = new Beacon("north");
Object result = pingFn.invoke(unit);
System.out.println(result);
}
}
Если у метода есть параметры, их добавляют после экземпляра в том же порядке, что в объявлении:
import java.lang.reflect.Method;
class Beacon {
private final String channel;
Beacon(String channel) {
this.channel = channel;
}
String format(int level) {
return channel + ":" + level;
}
}
public class Main {
public static void main(String[] args) throws Exception {
Method formatFn = Beacon.class.getDeclaredMethod("format", int.class);
Beacon unit = new Beacon("east");
System.out.println(formatFn.invoke(unit, 3));
}
}
Закрытый метод перед вызовом открывают через
setAccessible, как и закрытый конструктор.
Поиск по имени и типам параметров выполняет
getDeclaredMethod.
Класс Mixer содержит метод из двух целых
параметров, возвращающий их сумму. Найдите метод
средствами рефлексии и вызовите его с аргументами
2 и 5.
Класс Relay имеет метод без параметров,
который возвращает строку "ok". Выполните
его для готового
экземпляра.