jakarta-ee - 表达式语言 lambda 类型推断

标签 jakarta-ee lambda el

通常我会这样做:

Function<Integer, Integer> a = b -> b * 2;
System.out.println(a.apply(3)); // prints 6

我惊讶地发现以下 EL 表达式有效:

${a = b -> b * 2; a(3)}

上述EL表达式的结果是6。在代码段 2 中声明 a 但需要代码段 1 中的类型信息时,编译器如何确定类型?

即使这样编译和执行也很好:

${(b -> b * 2)(3)}

最佳答案

EL 求值器/执行器不知道 EL 表达式中 a 的确切类型。它只是知道它应该是一个 Number 因为 * 操作

${a = b -> b * 2; a(3)}

看看这些结果:

${a = b -> b * 2; a(3)}
6

${a = b -> b * 2; a('32')}
64

${a = b -> b * 2; a('32s')}
java.lang.NumberFormatException: For input string: "32s"

因此,只有在运行时您才会收到异常,因为 Long.parse("32s") 失败。

看看ELArithmetic.java#211的源代码

关于jakarta-ee - 表达式语言 lambda 类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48949303/

相关文章:

Java CDI : Do interceptors have scope?

java - 如何通过在 glassfish 中部署的应用程序定义不同的连接池

c# - 将包含 IN 语句的 SQL 转换为可链接的 LINQ

c++ - C++ 中的 lambda 返回类型

java - 带分页的数据表中的 Wicket 复选框

java 将剩余部分发送到连接在同一 LAN 中的系统

python-3.x - 使用 lambda 函数修改以下内容并将 python2 代码过滤为 python 3

jsf - 错误 : javax. el.PropertyNotFoundException : Target Unreachable, 'null' 返回 null

java - 如何访问 Thymeleaf 中的内部对象?

java - 让 JSF 从 EL 而不是 bean 字段访问 Map<String, ?> 值?