写点什么

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:533357
用户头像

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

关注

评论

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

阿里巴巴拍立淘API返回值:商品搜索与社交媒体的融合

技术冰糖葫芦

API Explorer API boy API 接口 API 测试

虚拟滚动 - 从基本实现到 Angular CDK

PingCode研发中心

大数据 虚拟滚动

软件测试的持存化

FunTester

DDD-1-整体理解

南山

DDD

DDD-2-事件风暴

南山

领域驱动设计 DDD 事件风暴

AI 应用实战营 - 作业 十二 - 文件翻译助手

德拉古蒂洛维奇

电商出海万亿蓝海,融云客服协同、直播间方案全面覆盖

融云 RongCloud

Web3 游戏周报(8.11 - 8.17)

Footprint Analytics

链游

秒合约/币币交易所系统开发方案项目/步骤详细解析

V\TG【ch3nguang】

币币交易所系统开发

事业-最佳实践-个人-拥抱变化

南山

必看!时序大模型的发展、玩家与效果对比

Apache IoTDB

亚信安慧AntDB数据库荣列“2024金融信创优秀服务商TOP50”榜单

亚信AntDB数据库

AntDB

学而思二代旗舰学习机精准学Pro 值得买吗

妙龙

学而思

网速慢影响海外业务?全球应用加速可以解决!

Ogcloud

网络加速 全球应用加速 企业网络加速 网络加速服务

茶思屋直播|解锁TinyEngine无限可能,从0到1打造多领域低代码设计器实战

OpenTiny社区

开源 前端 低代码 OpenTiny

华为账号“一键登录”能力让美团用户尽享安全便捷的登录体验

HarmonyOS SDK

HarmonyOS

独家为《白蛇:浮生》提供云渲染服务,腾讯云助力追光动画再现东方美学

ToB行业头条

腾讯云

事业-最佳实践-个人-学会说不

南山

Meetup 回顾:存算引擎一体化建设

Databend

AI 实时通话视频生成产品 Tavus:能听说看且有形象;Anthropic 推出 API 长文本缓存功能丨 RTE 开发者日报

声网

"数据驱动增长,实时监控商品信息是关键 —— 淘宝API的实战应用"

技术冰糖葫芦

API Explorer API boy API 接口 API 测试

AI 创业及变现新思路:零门槛 AI 绘图,定制 ComfyUI Serverless API 应用

阿里巴巴云原生

阿里云 Serverless 云原生

阿里云2024云栖大会,来了!

MasterInTech

这个是我的测试编辑器的内容

网站,小程序,APP开发定制

事业-最佳实践-个人-做事原则

南山

社区胜于代码,我们在阿帕奇软件基金会亚洲大会聊了聊开源中间件的未来

阿里巴巴云原生

Apache 阿里云 云原生

Vue 和 React 各自的背景和特点

伤感汤姆布利柏

科大讯飞会议耳机pro2 怎么样

妙龙

科大讯飞

海外直播对网络的要求有哪些?

Ogcloud

海外直播专线 海外直播 tiktok直播 tiktok直播专线 海外直播网络

OpManager网络监控软件适合什么样的IT用户?

Geek_a83400

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