Y
Со статической типизацией (чтобы корректность передаваемого метода и параметров проверял компилятор). В таком случае вам подойдет механизм method reference. Используется он следующим образом - вы определяете сигнатуру метода FOO (т.е. его входные и выходной параметр), который планируете принимать в качестве аргумента в методе BAR. Ищите среди существующих функциональных интерфейсов подходящий, или же пишите свой при необходимости. Объявляете в методе BAR параметр выбранного типа (например BiFunction<String, Integer>). Далее в коде при вызове метода BAR передаете ему ссылку на конкретную реализацию - BAR(MyClass::FOO).
Рантайм передача метода с использованием рефлексии. BAR на вход принимает объект класса java.lang.Method а внутри вы вызываете method.invoke(ref, args...) где в качестве первого параметра - объект, на котором будет вызван метод а в качестве второго - набор аргументов, которые ему будут переданы.
Первый вариант предпочтительнее в силу своей типизации, более явного поведения и возможности использования многих фич IDE.
void say();
}
public class MethodReference {
public static void saySomething(){
System.out.println("Hello, this is static method.");
}
public static void main(String[] args) {
// Referring static method
Sayable sayable = MethodReference::saySomething;
// Calling interface method
sayable.say();
}
}
это оно ?