我正在学习Java中的Lambda,并尝试理解它.例如,我有以下代码:
@FunctionalInterface
interface Square
{
int calculate(int x);
}
class Test
{
public static void main(String args[])
{
int a = 5;
Square s = (int x) -> x*x;
int ans = s.calculate(a);
System.out.println(ans);
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白这个陈述Square s = (int x) -> x*x;我看到的s是类型的引用变量Square.但我不明白到底是什么(int x) -> x*x.这是方法定义吗?这种方法的返回类型是什么?我认为这应该是int因为calculate方法的返回类型是int.任何反馈将不胜感激.
您的lambda表达式可以替换为匿名类:
Square s = new Square() {
@Override
public int calculate(int x) {
return x * x;
}
};
Run Code Online (Sandbox Code Playgroud)
所以(int x) -> x*x只是执行calculate带int参数和返回int值的方法.顺便说一下,没有必要指定参数类型.你可以这样做:
Square s = x -> x*x;
Run Code Online (Sandbox Code Playgroud)
现在你有了类型的对象,Square你可以calculate在lambda表达式中调用之前定义的方法:
int squared = s.calculate(5);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14122 次 |
| 最近记录: |