繁体   English   中英

Java-通过参数传递方法

[英]Java - Passing a method through a parameter

我正在尝试创建一种方法,该方法使我可以利用我认为的lambda来通过一系列连接执行一种方法。

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

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

这种方法的目标是让我自己构造一个“随时随地”的方法,而不会为此造成空白。

这可能吗? 似乎我以前已经使用过很多声明。 看来这实际上就是lambdas语句的工作方式。

Callable接口的call方法返回类型T的值。 您的lambda只是call方法的简写形式,同样应该返回T值。

可以使用lambda表达式替换任何符合FunctionalInterface要求的接口。 这样的接口将只有一个抽象方法,没有默认实现 对于您的问题,接口是Callable ,抽象方法是call 然后,lambda表达式在该接口的匿名实现中充当该抽象方法的主体。

让我们以doStuff(Callable<Integer> stuff)方法为例。 为了满足此接口,您可以提供一个匿名类:

doStuff(new Callable<Integer>(){
    public Integer call(){
        return 5;
    }
});

或者您可以使用lambda:

doStuff( () -> {
    return 5;
} );

或更简洁地说:

doStuff( () -> 5 );

如果您的方法没有返回类型,那么Runnable可能会更合适。

另请参见: Lambda表达式(Oracle)-“在Lambda表达式中使用标准功能接口”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM