Java 8 Java 8 Lambda表达式

Java 8 Java 8 Lambda表达式,java-8,Java 8,我是Java8Lambda的新学员。 我在一本书中找到一句话(Java8代表真正不耐烦的人),说, lambda表达式在某些分支中返回值而在其他分支中不返回值是非法的。例如,(int x)->{if(x>=0)return 1;}无效。“ 有人能解释一下吗?请提供一些例子 提前谢谢。你不懂的地方我也不懂。例如,这会编译吗 static int test(int x) { if(x >= 0) { return 1; } } lambda表达式也是如此

我是Java8Lambda的新学员。 我在一本书中找到一句话(Java8代表真正不耐烦的人),说, lambda表达式在某些分支中返回值而在其他分支中不返回值是非法的。例如,(int x)->{if(x>=0)return 1;}无效。

有人能解释一下吗?请提供一些例子


提前谢谢。

你不懂的地方我也不懂。例如,这会编译吗

 static int test(int x) {
    if(x >= 0) {
        return 1;
    }
 }

lambda表达式也是如此

我不懂你不懂的地方。例如,这会编译吗

 static int test(int x) {
    if(x >= 0) {
        return 1;
    }
 }

lambda表达式也是如此

您必须确保无论“if”语句是真是假,都始终存在返回值或不存在返回值

就你而言:

非法:
(int x)->{if(x>=0)返回1;}

合法:
(intx)->{if(x>=0)返回1;else返回0;}

这是因为下面的方法是非法的

int lambda (int x){
    if (x >= 0)
        return 1;
}

您必须确保无论“if”语句是真是假,都始终存在返回值或不存在返回值

就你而言:

非法:
(int x)->{if(x>=0)返回1;}

合法:
(intx)->{if(x>=0)返回1;else返回0;}

这是因为下面的方法是非法的

int lambda (int x){
    if (x >= 0)
        return 1;
}

我不理解你的困惑。您已经有了一个带有解释的示例。这是无效的,因为两个分支中只有一个返回值。无论您编写的是标准方法还是类似于上面的lambda表达式,代码都需要有一些已定义的结果。在您的示例中,对于负数输入(
x
),表达式没有返回任何内容,这是不允许的。这本书应该重新命名为Java 8以便真正耐心地阅读。Java 8已经推出3年了;-)@C-Otto,谢谢你的回复。明白了。不知怎的错过了比赛context@SotiriosDelimanolis,谢谢你的回复。我不理解你的困惑。您已经有了一个带有解释的示例。这是无效的,因为两个分支中只有一个返回值。无论您编写的是标准方法还是类似于上面的lambda表达式,代码都需要有一些已定义的结果。在您的示例中,对于负数输入(
x
),表达式没有返回任何内容,这是不允许的。这本书应该重新命名为Java 8以便真正耐心地阅读。Java 8已经推出3年了;-)@C-Otto,谢谢你的回复。明白了。不知怎的错过了比赛context@SotiriosDelimanolis,谢谢你的回复。