Java 14 中的 Lambda 表达式和“?:”运算符

Lambda expresions and "? :" operator in Java 14

大家好,

我对 ? : 运算符在 lambda 表达式中的用法有疑问,尤其是在 switch 语句中。你能澄清一下,为什么下面的代码不起作用并且会被标记为 Not a statement

 switch (separatedTransaction[0]) {
            case "u" -> processUpdate(Integer.parseInt(separatedTransaction[1]), Integer.parseInt(separatedTransaction[2]), separatedTransaction[3]);
            case "o" -> processOrder(separatedTransaction[1], Integer.parseInt(separatedTransaction[2]));
            case "q" -> separatedTransaction.length > 2 ? processQuery(Integer.parseInt(separatedTransaction[2])):processQuery(separatedTransaction[1]);
            default -> System.out.println("Invalid transaction");
        }

下一个。

 switch (separatedTransaction[0]) {
            case "u" -> processUpdate(Integer.parseInt(separatedTransaction[1]), Integer.parseInt(separatedTransaction[2]), separatedTransaction[3]);
            case "o" -> processOrder(separatedTransaction[1], Integer.parseInt(separatedTransaction[2]));
            case "q" -> {
                if (separatedTransaction.length > 2) {
                    processQuery(Integer.parseInt(separatedTransaction[2]));
                } else {
                    processQuery(separatedTransaction[1]);
                }
            }
            default -> System.out.println("Invalid transaction");
        }

有没有办法在 lambda 表达式中使用 ? : 运算符?
如果是这样,您能否提供一些代码示例。

忘记那个 switch 语句的所有爵士乐吧,这是一条红鲱鱼;完全与情况无关(作为旁注,那些 -> 箭头不是 'lambdas'。它们只是 switch-as-expression 语法的一部分)。

就是这个:

separatedTransaction.length > 2 ? processQuery(Integer.parseInt(separatedTransaction[2])):processQuery(separatedTransaction[1])

解释失败。那是无效的 java 代码。将其包装在 java14 中引入的新功能中不会使其变得更合法。

三元运算符构造采用以下形式:

booleanExpression ? expr1 : expr2

其中 expr1expr2 本身必须是表达式。整个事物的类型是 expr1 和 expr2 类型之间的共同点,关键是,共同点不能是 void.

这就是问题所在:processQuery returns void 因此不能在三元表达式中的任何 3 'slots' 中使用。