Java - 通过参数传递方法

时间:2014-11-18 02:08:10

标签: 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 (() -> {})

这种方法的目标是让自己在旅途中构建一种方法&#34;没有为它创造空白。

这可能吗?好像我之前已经使用了大量的声明。看起来这实际上就是lambdas语句的工作方式。

1 个答案:

答案 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'