Java—通过参数传递方法

Java—通过参数传递方法,java,lambda,callable,Java,Lambda,Callable,我正在尝试创建一个方法,它允许我使用我认为叫做lambdas的东西,通过一系列连接执行一个方法 这是我经过一些研究后得出的代码,但它不起作用: performGlobalAction(()->{ // doSomething(); }); 您还需要了解我假设的方法: private <T> void performGlobalAction(Callable<T> action) { for(int i = 0; i < connectionL

我正在尝试创建一个方法,它允许我使用我认为叫做lambdas的东西,通过一系列连接执行一个方法

这是我经过一些研究后得出的代码,但它不起作用:

performGlobalAction(()->{
    // doSomething();
});
您还需要了解我假设的方法:

private <T> void performGlobalAction(Callable<T> action) {
    for(int i = 0; i < connectionList.size(); i++) {
        connectionList.get(i).performAction(action);
    }
}
private void performGlobalAction(可调用操作){
对于(int i=0;i
这提供了以下错误:

The method performAction(Callable<T>) in the type Connection is not
applicable for the arguments (() -> {})
类型连接中的方法performAction(可调用)不可用
适用于参数(()->{})
这个方法的目标是允许我自己“在路上”构造一个方法,而不为它创建一个空白

这可能吗?似乎我以前用过很多这样的语句。看起来lambdas语句实际上就是这样工作的。

返回类型为
T
的值。lambda只是call方法的简写,同样应该返回
T

满足的任何接口都可以用lambda表达式替换。这样一个接口将有一个单一的抽象方法,一个没有任何属性的抽象方法。对于您的问题,接口是
可调用的
,抽象方法是
调用
。然后,lambda表达式在该接口的匿名实现中充当该抽象方法的主体

让我们以一个方法
doStuff(可调用的东西)
为例。要满足此接口的要求,您可以提供一个匿名类:

doStuff(new Callable<Integer>(){
    public Integer call(){
        return 5;
    }
});
或者更简洁地说:

doStuff( () -> 5 );
如果您的方法没有返回类型,可能更适合

另请参见:

返回类型为
T
的值。lambda只是call方法的简写,同样应该返回
T

满足的任何接口都可以用lambda表达式替换。这样一个接口将有一个单一的抽象方法,一个没有任何属性的抽象方法。对于您的问题,接口是
可调用的
,抽象方法是
调用
。然后,lambda表达式在该接口的匿名实现中充当该抽象方法的主体

让我们以一个方法
doStuff(可调用的东西)
为例。要满足此接口的要求,您可以提供一个匿名类:

doStuff(new Callable<Integer>(){
    public Integer call(){
        return 5;
    }
});
或者更简洁地说:

doStuff( () -> 5 );
如果您的方法没有返回类型,可能更适合


另请参见:

哦,对不起,正在更新。好多了。现在的误解是lambdas如何映射到函数接口的实例。您的
Callable
类型(假设它是
java.util.concurrent.Callable
)有一个返回类型为
T
的方法。lambda表达式的主体没有可作为返回值的表达式或语句。@SotiriosDelimanolis-不确定我是否完全理解所有这一切,离开此处找到的信息:--我不太清楚,我将如何在我尝试的上下文中使用lambda?可能吗?哦,抱歉,更新。好多了。现在的误解是lambdas如何映射到函数接口的实例。您的
Callable
类型(假设它是
java.util.concurrent.Callable
)有一个返回类型为
T
的方法。lambda表达式的主体没有可作为返回值的表达式或语句。@SotiriosDelimanolis-不确定我是否完全理解所有这一切,离开此处找到的信息:--我不太清楚,我将如何在我尝试的上下文中使用lambda?有可能吗?感谢功能接口上的链接,这在很大程度上帮助了我理解lambda,但我仍然很难理解这个实现。我知道这要求有点高,但你能提供一个psuedo/工作示例吗?答案甚至不必是lambda实现,类似于C#delegate的东西也足够了,只需在参数上传递一个(动态)方法。仅供参考,我的语法可能已关闭,但目前没有时间更正。编辑,伙计们!
Runnable
不执行任何类型的线程;毕竟,它只是一个接口。调用时,它将在当前线程中运行。“任何注释为FunctionInterface的接口都可以用lambda表达式替换”-好吧,甚至更好:FunctionInterface只是一个信息性注释。您也可以将lambda与普通接口一起使用,只要它们符合您提到的其他要求。感谢功能接口上的链接,这在很大程度上帮助了我对lambda的理解,但我仍然很难理解这个实现。我知道这要求有点高,但你能提供一个psuedo/工作示例吗?答案甚至不必是lambda实现,类似于C#delegate的东西也足够了,只需在参数上传递一个(动态)方法。仅供参考,我的语法可能已关闭,但目前没有时间更正。编辑,伙计们!
Runnable
不执行任何类型的线程;毕竟,它只是一个接口。调用时,它将在当前线程中运行。“任何注释为FunctionInterface的接口都可以用lambda表达式替换”-好吧,甚至更好:FunctionInterface只是一个信息性注释。您还可以将lambda与普通接口一起使用,只要它们符合您提到的其他要求。