Java EE 7 Expression Language 3を発売

2526 ワード

Java EE 7は、Java式言語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の一部として計画されている.しかし、これからは、JSR-341の機能強化の一部として、遅延やプリロードストリーム、lambda式が採用され、開発者が利益を得ることができます.

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中国語サイトへの投稿または翻訳に参加する場合は、[email protected].新浪微博(@InfoQ;)やテンセント微博(@InfoQ;)を通じて私たちに注目し、私たちの編集者や他の読者の友达と交流することを歓迎します.