Java中的Lambda表达式返回类型

6 java lambda java-8

我正在学习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.任何反馈将不胜感激.

Rus*_*lan 5

您的lambda表达式可以替换为匿名类:

Square s = new Square() {
    @Override
    public int calculate(int x) {
        return x * x;
    }
};
Run Code Online (Sandbox Code Playgroud)

所以(int x) -> x*x只是执行calculateint参数和返回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)