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
其中 expr1
和 expr2
本身必须是表达式。整个事物的类型是 expr1 和 expr2 类型之间的共同点,关键是,共同点不能是 void
.
这就是问题所在:processQuery
returns void
因此不能在三元表达式中的任何 3 'slots' 中使用。
大家好,
我对 ? :
运算符在 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
其中 expr1
和 expr2
本身必须是表达式。整个事物的类型是 expr1 和 expr2 类型之间的共同点,关键是,共同点不能是 void
.
这就是问题所在:processQuery
returns void
因此不能在三元表达式中的任何 3 'slots' 中使用。