Это не имеет никакого отношения к отражению, но вы можете передать «ссылки на методы», если вы используете java 8+. Предполагая, что из вашего примера, что вы собираетесь использовать методы, которые не требуют никаких параметров и просто возвращают Int, вы можете сделать это:
public class MyClass {
public int getIntMemberFunction(){ ... }
public static int getIntStaticFunction(){ ... }
}
с вашей функцией обновления модифицированной выглядеть следующим образом,
public boolean update(IntSupplier s){ //input is a method reference or lambda
int i = s.get();
// logic relating to the value of i
}
Тогда вы могли бы назвать update
передавая ссылку на любую статическую функцию любого класса, пока он не принимает никаких параметров и возвращает Int, например:
boolean result = update(MyClass::getIntStaticFunction);
или у НУ можно назвать update
передавая ссылку на какой-либо функции члена конкретного объекта до тех пор, как он не принимает никаких параметров и возвращает Int, например:
MyClass myClassInstance = ...
boolean result = update(myClassInstance::getIntMemberFunction);
Если вы хотите добавить методы, которые принимают 1 или 2 параметра , вы можете создать версии update
, которые принимают ToIntFunction
или ToIntBiFunction
. Помимо 2 параметров вам нужно будет добавить свои собственные функциональные интерфейсы.
Можете ли вы использовать Java 8? Он добавляет поддержку лямбда-выражений, что упрощает функциональное программирование. Если нет, то размышление - это способ сделать то, что вы просите. –
Насколько я понял из вашего вопроса, что вы не пытались создать простую программу, чтобы попробовать? Даже если это не сработает, это создает лучший вопрос, когда вы пишете код, проверяете его и рассказываете о результате. См. Http://stackoverflow.com/help/mcve –
Да. Lambdas очень полезны и предлагают некоторые функциональные возможности программирования в Java – Logan