Hob*_*ist 1 java lambda callable
我正在尝试创建一种方法,允许我使用我认为称为lambdas的方法,在一系列连接上执行方法.
这是我在经过一些研究后得出的代码,但它不起作用:
performGlobalAction(()->{
// doSomething();
});
Run Code Online (Sandbox Code Playgroud)
你还需要看到我假设的方法:
private <T> void performGlobalAction(Callable<T> action) {
for(int i = 0; i < connectionList.size(); i++) {
connectionList.get(i).performAction(action);
}
}
Run Code Online (Sandbox Code Playgroud)
这提供了以下错误:
The method performAction(Callable<T>) in the type Connection is not
applicable for the arguments (() -> {})
Run Code Online (Sandbox Code Playgroud)
这种方法的目标是允许自己构建一个"在旅途中"的方法,而不会为它创建一个空白.
这可能吗?好像我之前已经使用了大量的语句.看起来这实际上就是lambdas语句的工作原理.
callCallable接口的方法返回type的值T.lambda只是call方法的简写,同样应该返回一个T值.
任何满足FunctionalInterface要求的接口都可以用lambda表达式代替.这样的接口将有一个抽象方法,一个没有默认实现.对于您的问题,接口是Callable,抽象方法是call.然后,lambda表达式在该接口的匿名实现中充当该抽象方法的主体.
我们以一个方法为例doStuff(Callable<Integer> stuff).要满足此接口,您可以提供一个匿名类:
doStuff(new Callable<Integer>(){
public Integer call(){
return 5;
}
});
Run Code Online (Sandbox Code Playgroud)
或者你可以使用lambda:
doStuff( () -> {
return 5;
} );
Run Code Online (Sandbox Code Playgroud)
或者甚至更简洁:
doStuff( () -> 5 );
Run Code Online (Sandbox Code Playgroud)
如果您的方法没有返回类型,Runnable那么可能更适合.
另请参阅:Lambda表达式(Oracle) - "将标准功能接口与Lambda表达式一起使用"
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |