我试图创建一种方法,允许我使用我认为称为lambdas的方法,通过一系列连接执行方法。
这是我在经过一些研究后得出的代码,但它不起作用:
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 (() -> {})
这种方法的目标是让自己在旅途中构建一种方法&#34;没有为它创造空白。
这可能吗?好像我之前已经使用了大量的声明。看起来这实际上就是lambdas语句的工作方式。
答案 0 :(得分:5)
The call
method of the Callable interface返回T
类型的值。 lambda只是call方法的简写,同样应返回T
值。
任何满足FunctionalInterface要求的接口都可以用lambda表达式代替。这样的接口将有一个抽象方法,一个没有default implementation。对于您的问题,界面为Callable
,抽象方法为call
。然后lambda表达式在该接口的匿名实现中充当该抽象方法的主体。
我们以方法doStuff(Callable<Integer> stuff)
为例。要满足此接口,您可以提供一个匿名类:
doStuff(new Callable<Integer>(){
public Integer call(){
return 5;
}
});
或者你可以使用lambda:
doStuff( () -> {
return 5;
} );
或者更简洁:
doStuff( () -> 5 );
如果您的方法没有返回类型,那么Runnable
可能更合适。
另请参阅:Lambda Expressions (Oracle) - 'Use Standard Functional Interfaces with Lambda Expressions'