Java - 通过参数传递方法

标签 java lambda callable

我正在尝试创建一种方法,允许我利用我认为称为 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 (() -> {})

此方法的目标是允许我自己“随时”构建一个方法,而无需为其创建 void。

这可能吗?似乎我已经使用了很多以前做过的语句。看起来这正是 lambda 语句的工作原理。

最佳答案

The call method of the Callable interface返回 T 类型的值.您的 lambda 只是 call 方法的简写,同样应该返回 T。值(value)。

任何满足 FunctionalInterface 要求的接口(interface)可以用 lambda 表达式代替。这样的接口(interface)将有一个抽象方法,一个没有 default implementation 的方法。 .对于你的问题,接口(interface)是Callable ,抽象方法为call .然后,lambda 表达式在该接口(interface)的匿名实现中充当该抽象方法的主体。

让我们以一个方法doStuff(Callable<Integer> stuff)为例.为了满足这个接口(interface),你可以给一个匿名类:

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'

关于Java - 通过参数传递方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26985390/

相关文章:

Java与Jython,解决路径问题的优雅方式?

java - 是否可以将 HSQLDB 模式即时更改为只读?

c++ - 我如何在 C++11 中解决 SICP 2.4

java - 同步问题: I want the main thread to be run before another thread but it sometimes doesn´t

java - 线程是否会等到可以编辑(例如 addAndGet)原子变量为止?

java - 正确使用 AtomicReference.compareAndSet 实现堆栈

C++14 使用捕获说明符在 lambda 函数内部递增一个值

python - Pandas:当组中的值落在某个范围内时,将组保留在数据中

java - 如何并行而不是顺序执行多个模型?

java - 嵌套异常是 java.util.concurrent.ExecutionException