java - 当参数是谓词时,EL 3.0 (JSR-341) 不工作?

标签 java el

这个测试显示了我的问题:

public static String testMe(Predicate<String> filter) {
    return "yeah!";
}

@Test
public void testPredicateAsArgument() throws ClassNotFoundException, NoSuchMethodException {
    final ELProcessor elp = new ELProcessor();
    elp.defineFunction("", "", "test.EL3Test", "testMe");
    try {
        Object result = elp.eval("testMe(o->true)"); // IllegalArgumentException
        // ...
    } catch (javax.el.ELException ex) {
        fail(Exceptions.getCauseMessage(ex));
    }
}

它抛出:IllegalArgumentException:无法将类型类 javax.el.LambdaExpression 的 javax.el.LambdaExpression@511baa65 转换为接口(interface) java.util.function.Predicate

这是 EL 3 的错误或限制还是我遗漏了什么?

测试版本:org.glassfish:javax.el:jar:3.0.0org.glassfish:javax.el:jar:3.0.1-b08

还发布了 as github issue

截至 2021-09-06 的更新

通过 https://github.com/eclipse-ee4j/el-ri/commit/bcd0eeb349af607eb15428c04853a0be0948f80c 实现

最佳答案

EL 3.0 是在 Java 1.7(Java EE 7 的目标)而非 Java 1.8 期间创建的。换句话说,它早于 Java 原生 lambda 表达式,因此不可能对它们一无所知。

你能做的最好的事情就是发布下一个 EL 版本的增强问题。我们目前已经在使用 Java EE 8(针对 Java 1.8),但还没有 EL 3.1。您必须等待 Java EE 9 才能让任何增强请求最终出现在 EL.next 中。

关于java - 当参数是谓词时,EL 3.0 (JSR-341) 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46573761/

相关文章:

java - 与xml spring配置相关

java - 统一表达语言,方法调用列表参数

java - 如何从 session 中作为 JsonNode 访问 | ${user.get()}

spring - 如何解决 Jsf :Property 'not found" on type with root cause?

JSP 页面中的 javax.el.PropertyNotFoundException

java - 在参数上调用静态方法而不实例化参数中的类

java - Apache 公共(public) CLI : how to prevent using short-name for options?

java - 如何将处理中的矩形更改为我正在制作的游戏的图像?

java - IntelliJ 不突出显示任何内容

java - 如何比较 <c :when> 中的两个变量