【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Java EE 7 推出 Expression Language 3

  • 2013-07-30
  • 本文字数:1300 字

    阅读完需:约 4 分钟

Java EE 7 对 Java 表达式语言 API 进行了大幅度的调整,该 API 即 Expression Language 3。根据 JSR-341 ,EL API 的增强包括对 lambda 表达式的支持、静态字段和方法访问、集合处理和独立处理器模式等。

在 Java EE 7 之前,Java 表达式语言是 JavaServer Faces 和 JavaServer Pages API 的紧耦合组件。JSR-341 将 Java 表达式语言当作独立实体,从 Java EE 的视图层 API 中解耦出来,但仍然保持其互操作性。

现在,EL API 给了开发人员调用特定 Java EL 的能力。创建一个新引入的 ELProcessor 类实例,并用一个表示可计算脚本的字符串作为参数,调用它的 eval 方法,返回结果可以在 Java 应用的作用域内用作一个变量。

复制代码
ELProcessor el = new ELProcessor();
assert ((Integer)el.eval("a = [1, 2, 3]; a[1]")) == 2;

除了上述独立模式,JSR-341 还给予 Java EE 开发人员编写 lambda 表达式的能力。Lambda 表达式已被列入明年的 Java 8 标准版,但当前 EL 开发人员只能在他们的脚本中使用 lambda 语法。在去年的 JavaOne 大会上,JSR-341 规范的领导者 Kin-man Chung 就曾指出,为了确保 API 的通用性和将来 Java EL 与 Java 8 的互操作性,制定规范的专家组咨询了大量 Java 8 项目的 Lambda 开发人员。

复制代码
ELProcessor el = new ELProcessor();
assert ((Integer)(el.eval("((x,y) -> x+y)(4, 5)"))) == 9;

为了处理集合,新的 Java EL 流 API 包括 forEach、reduce、filter 和 map 等操作符。Java EL 集合处理中引入的许多特性和概念也计划整合到 Java 中,并作为 Java 8 的一部分。但是,从现在开始,延迟和预加载流以及 lambda 表达式作为 JSR-341 功能增强一部分,开发人员就能从中获益。

复制代码
ELProcessor el = new ELProcessor();
List list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
list.add(i);
}
el.defineBean("list", list);
List processedList = (List)el.eval("list.stream().filter( x -> x <= 3).map(x -> x * 5)
.toList()");
assert processedList.get(0) == list.get(0);
assert processedList.get(1) == list.get(5);
assert processedList.get(2) == list.get(10);
assert processedList.get(3) == list.get(15);

此外,JSR-341 还实现了一个期待已久的对 Java EL 的增强,它使开发人员可以直接访问静态字段和方法。默认情况下,java.lang.* 类会被预加载到所有的脚本中,但是,使用 ELProcessor 实例的 ELManager 之后,EL 脚本开发人员可以直接使用这些加载到 EL 上下文的类的静态内容。

复制代码
ELProcessor el = new ELProcessor();
el.getELManager().importStatic("com.company.Class.STATIC_FIELD");
assert (el.eval("Math.random()") instanceof Double);
System.out.println(el.eval("STATIC_FIELD"));

JSR-341 对 Java 表达式语言的增强,将和新引入的独立处理器模式一起,成为 JSP 和 JSF 实现的强大助手。

参考英文原文: Java EE 7 Delivers Expression Language Enhancements


感谢马国耀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ ;)或者腾讯微博( @InfoQ ;)关注我们,并与我们的编辑和其他读者朋友交流。

2013-07-30 03:533272
用户头像

发布了 256 篇内容, 共 81.6 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

“PO高阶精进课程” 7月13-14日 · A-CSPO认证周末班【提前报名特惠】

ShineScrum捷行

大小单双怎么判断出长龙

闵东升

人工智能数字人源码独立部署实现无限量免费克隆!

青否数字人

数字人

14款DevOps/SRE工具,助力提升运维效率

SEAL安全

开源 DevOps 运维 SRE

码农必看:常见源代码混淆技术详解

雪奈椰子

ChatGPT 人工智能助手为你定制测试计划,精准又高效!

测试人

软件测试 ChatGPT

【论文速读】| 基于大语言模型的模糊测试技术

云起无垠

数字人攻陷直播间代替真人直播带货!

青否数字人

数字人

“数字创新产品课程” 7月27-28日 · CSPO认证周末班【提前报名特惠】CST导师亲授

ShineScrum捷行

对于交互型数字人您了解多少!

青否数字人

数字人

正式签约 | 杭州悦数联袂电子科大重点实验室,打造基于图技术的智慧电网解决方案

悦数图数据库

图技术

大发最安全回血计划

闵东升

生物芯片搅局多肽筛选!揭秘量准与禾泰健宇新布局!

联营汇聚

玩大小单双有正规平台嘛

闵东升

小程序已成为超级APP必选项

Geek_2305a8

印度股票交易系统开发GangguHk

GangguHK

优雅永不过时:数据库表设计的12个关键点

菜根老谭

数据库 代码规范 菜根智库

时尚女装连衣裙搜罗:利用阿里巴巴API接口轻松获取心仪商品ID

技术冰糖葫芦

API boy api 货币化 pinduoduo API

通俗易懂关于Paxos的直观解释

京东科技开发者

无用代码扫描组件设计

京东科技开发者

正规买大小单双的平台

闵东升

网上买大小单双平台有人带包赢

闵东升

精准高效测试计划,人工智能帮你制定

霍格沃兹测试开发学社

浅谈从浏览器输入URL到页面渲染的流程

京东科技开发者

带人回血上岸是什么套路

闵东升

求带回血的良心导师联系方式

闵东升

大小单双正规平台下载安卓版

闵东升

一些MaxCompute日常优化案例分享

阿里技术

MaxCompute union dmj

2024 年 3 月公链行业研报:比特币创新高、Meme 掀热潮、AI 板块露头角

Footprint Analytics

比特币 AI 公链 Meme

低代码开发平台推荐:国内超好用的十款实测

菜根老谭

低代码 零代码 菜根智库

OLAP进阶之“性能提升”

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号 4 月 PK 榜

Java EE 7推出Expression Language 3_Java_Dan Woods_InfoQ精选文章