java - 使用时异常? : operator in Java 8 lambda expression

标签 java exception lambda

为什么在 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);
    }
}

我得到以下异常:

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

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

最佳答案

三元语句要求单独的部分是表达式和​​非语句

不允许在单独的分支中调用语句。

有关详细信息,请参阅 Java Language specification section 15.25

关于java - 使用时异常? : operator in Java 8 lambda expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25971031/

相关文章:

java - JButton + AbstractAction 重置一堆 JCheckBox - Swing

python - 退出失败的脚本运行(python)

java - 使用 lambda 获取 Map<K,V> 的最大键

recursion - 在 lambda 函数中递归

c++ - 将 lambda 函数作为第三个参数传递给 QObject::connect 时出错

java - 从安全的远程存储库下载依赖项

java - 将 SQL/plPGsql 测试移植到 Java/JDBC : test an exception

sql-server - 如何从 PyMSSQL 捕获异常

exception - 正确使用错误

java - 编译java程序时出现错误