在Java 8 lambda表达式中使用?:运算符时出现异常

Seb*_*ebi 3 java lambda exception

为什么?:在Java 8 lambda表达式中使用运算符时会抛出异常?
当我尝试运行以下示例代码时:

import java.util.ArrayList;
import java.util.List;

public class TestClass
{
    public static void main(String[] args)
    {
        List<Foo> foos = new ArrayList<>();
        boolean b = true;
        foos.forEach(foo -> (b ? foo.doSth(1) : foo.doSth(2)));
    }

    @FunctionalInterface
    interface Foo
    {
        public void doSth(int i);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
at gui.marksDetection.view.TestClass.main(TestClass.java:8)
Run Code Online (Sandbox Code Playgroud)

当用for-each-loop替换lambda表达式,或者用(b ? foo.doSth(1) : foo.doSth(2))if-else-block 替换时,一切正常,所以组合似乎有问题?: + lambda.但是,Eclipse不会将其标记为错误.

Vog*_*612 8

Ternary语句要求单独的部分是表达式而不是语句

您不能在单独的分支中调用语句.

有关更多信息,请参阅Java语言规范部分15.25