Wat*_* v2 6 java lambda programming-languages
请温柔地对待我.
我听说Java 8引入了lambdas.但在此之前,如果你想传递一个函数,比方说,作为一个论点,你做了什么?
我能想到的一种方法是创建一个单一的方法接口,如下所示:
public interface ISingleMethodInterface
{
bool Really(int n);
}
public bool GimmeFunction(ISingleMethodInterface interface, int n)
{
return interface.Really(n);
}
Run Code Online (Sandbox Code Playgroud)
但这是作为一等公民的功能非常有限的应用,因为:
除了执行该函数或将该对象传递给另一个方法之外,您无法做很多事情.有了lambdas,你可以创作.例如,你可以像这样否定那个lambda:
public bool GimmeLambdaAndIWillComputeItsInverse(Func<int, bool> predicate, int n)
{
return !predicate(n);
}
Run Code Online (Sandbox Code Playgroud)你不能归还lambdas或他们的衍生物.我的意思是,你只能像这样返回同一个对象:
// I know Java doesn't have Tuples but let's forget that for now
public Tuple GimmeFunction(ISingleMethodInterface interface, int n)
{
return new Tuple { Item1 = interface, Item2 = n };
}
Run Code Online (Sandbox Code Playgroud)
使用lambdas,您可以返回如下导数:
public Func<int, bool> GetInverseFunction(Func<int, bool> predicate, int n)
{
return n => !predicate(n);
}
Run Code Online (Sandbox Code Playgroud)那么,如果你需要做这样的事情,你做了什么?
一种只是传递函数接口的实例。你对此相对于 lambda 的诋毁有点过分,因为在 Java 中,lambda 确实是函数式接口。因此,由于一个是根据另一个来实现的,所以它们并不比另一个强。区别在于源代码的可读性如何打动您。
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |