Я хотел бы создать класс, который хранит список ссылок на методы, а затем выполняет их все с использованием Java 8 Lambda, но у меня есть некоторые проблемы.Java8 передать метод как параметр, используя lambda
Это класс
public class MethodExecutor {
//Here I want to store the method references
List<Function> listOfMethodsToExecute = new LinkedList<>();
//Add a new function to the list
public void addFunction(Function f){
if(f!=null){
listOfMethodsToExecute.add(f);
}
}
//Executes all the methods previously stored on the list
public void executeAll(){
listOfMethodsToExecute.stream().forEach((Function function) -> {
function.apply(null);
}
}
}
Это класс, который я создал для испытания
public class Test{
public static void main(String[] args){
MethodExecutor me = new MethodExecutor();
me.addFunction(this::aMethod);
me.executeAll();
}
public void aMethod(){
System.out.println("Method executed!");
}
}
Но есть что-то не так, когда я прохожу this::aMethod
с помощью me.addFunction
.
Что не так?
'Но есть что-то не так, когда я прохожу этот :: aMethod' - это потому, что есть ошибка где-то. Если вы хотите получить более конкретный ответ - задайте более конкретный вопрос. –
Опубликовать специальную ошибку, которую вы получаете, и более конкретный вопрос – Iamsomeone
A ['Function'] (http://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html) принимает аргумент и имеет возвращаемое значение. 'aMethod' не имеет ни того, ни другого. –