[英]Java - Passing a method through a parameter
我正在尝试创建一种方法,该方法使我可以利用我认为的lambda来通过一系列连接执行一种方法。
经过一些研究,这是我提出的代码,但是它不起作用:
performGlobalAction(()->{
// doSomething();
});
您还需要查看我采用的方法:
private <T> void performGlobalAction(Callable<T> action) {
for(int i = 0; i < connectionList.size(); i++) {
connectionList.get(i).performAction(action);
}
}
这提供了以下错误:
The method performAction(Callable<T>) in the type Connection is not
applicable for the arguments (() -> {})
这种方法的目标是让我自己构造一个“随时随地”的方法,而不会为此造成空白。
这可能吗? 似乎我以前已经使用过很多声明。 看来这实际上就是lambdas语句的工作方式。
Callable接口的call
方法返回类型T
的值。 您的lambda只是call方法的简写形式,同样应该返回T
值。
可以使用lambda表达式替换任何符合FunctionalInterface要求的接口。 这样的接口将只有一个抽象方法,没有默认实现 。 对于您的问题,接口是Callable
,抽象方法是call
。 然后,lambda表达式在该接口的匿名实现中充当该抽象方法的主体。
让我们以doStuff(Callable<Integer> stuff)
方法为例。 为了满足此接口,您可以提供一个匿名类:
doStuff(new Callable<Integer>(){
public Integer call(){
return 5;
}
});
或者您可以使用lambda:
doStuff( () -> {
return 5;
} );
或更简洁地说:
doStuff( () -> 5 );
如果您的方法没有返回类型,那么Runnable
可能会更合适。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.