Java - 通过参数传递方法

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语句的工作原理.

Ken*_*abz 5

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表达式一起使用"