请对我温柔点。
我听说Java 8引入了lambdas。但是在那之前,如果你想传递一个函数,比如说,作为一个论点,你做了什么?
我可以想到的一种方法是创建这样一个方法接口:
public interface ISingleMethodInterface
{
bool Really(int n);
}
public bool GimmeFunction(ISingleMethodInterface interface, int n)
{
return interface.Really(n);
}
但是,作为一流公民的职能的应用非常有限,因为:
所以,如果你需要做这样的事情,你做了什么?
发布于 2016-07-17 07:01:59
一个简单地传递了函数接口的实例。您对此相对于lambdas的贬低是有点不恰当的,因为在Java中,lambda实际上是功能接口。因此,由于一种是以另一种方式实现的,它们既不强于另一种。不同之处在于源可读性对您的影响。
发布于 2016-07-17 07:55:26
早在Java 8之前,我们就不得不使用笨重的旧匿名类语法来处理这类事情,导致代码如下所示:
object.gimmeFunction(new SingleMethodInterface(){
@Override public bool really(int n){
return n=="really".hashCode();
}
});
由于这种模式非常常见(请参阅比较器、可运行、ActionListener),因此决定该语言可以使用更简洁的语法,因此在Java 8中,我们被赋予兰巴斯将上面的讨厌块转换为:
object.gimmeFunction(n->n=="really".hashCode());
因此,这有助于在任何地方维护Java程序员的理智。两者在功能上是等价的,但前者更灵活,而第二个则要好得多。
https://stackoverflow.com/questions/38416701
复制相似问题