【コラム】

Java API、使ってますか?

60 どうなる? 今後のJavaプラットフォーム(Java SE編)

  • >
  • >>

60/60

Java 7に追加されるJSRたち

前回はJava EEの今後の動向を紹介したので、今回はJava SEについて取り上げたい。Java 7(Java SE 7)については、この記事でJava SEチームのチーフエンジニアであるMark Reinhold氏による講演の内容を紹介している。まず最も気になるリリース時期だが、Reinhold氏によれば2010年の初めごろを予定しているとのことである。

以下では同氏の講演を含めてこれまでに明らかになっている情報を総合し、Java 7に取り込まれる新機能をまとめてみる。まず、すでにJSRを取得している仕様としては以下のものが挙げられる。

  • JSR 166: Concurrency Utilities
  • JSR 203: More New I/O APIs for the Java
  • JSR 225: XQuery API for Java
  • JSR 255: JMX 2.0
  • JSR 262: Web Services Connector for JMX
  • JSR 292: JVM Support for dynamic languages
  • Project Jigsaw(モジュラリティの強化)
  • JSR 296: Swing Application Framework
  • JSR 308: Annotations on Java Types

ほとんどが以前の記事でも取り上げているものだが、モジュラリティの強化についてだけは補足が必要だろう。当初、モジュラリティの強化としてはJSR 294とJSR 277の2 つのAPIが検討されていた。前者はSuperpackage、後者はJAM(Java Application Module)と書いた方がわかりやすいかもしれない。そして2008年の初めごろ、Sunは両者を統合して仕様を検討し直すと発表。事実上はJSR 277に一本化されることになった。しかしそのJSR 277は多くの問題について解決の糸口が見えないことから、Java 7への統合を見送ることが決まった。

一方OpenJDKコミュニティでは、JSR 294のエキスパートグループが中心となって、JSR 277よりも低いレイヤーにおけるモジュールシステムを構築する試みとして「Project Jigsaw」が新たに立ち上がっている。Project Jigsawの成果はJava 7に反映される予定だが、Reinhold氏によれば(リリースまでの時間が短いので)JSRとして正式に仕様化されるものではないとのことだ。

参考

JSR 166はJ2SE 5.0から導入された並列プログラミングのためのユーティリティだが、Java 7ではFork/JoinやPhasers、LinkedTransferQueue、ConcurrentReferenceHashMapなどの拡張機能が追加される予定。

JSR 292はJVM上で動作する動的言語の実装をサポートするための仕様である。その中心となるのがJVMに対するinvokedynamic命令の実装で、これによって動的に型が決まるメソッド呼び出しを容易に実現できるようになる。現在はEarly Draftが公開されており、invokedynamic命令の概要とそれを利用するためのAPIについて解説されている。また、JVM上の動的言語のためのアーキテクチャを作成する「The Da Vinci Machine Project」は、すでにOpenJDK上でinvokedynamic命令の動作に成功したことを発表している。

その他のAPIに関しては過去の記事を参照していただきたい。

参考

Java 7のその他の新機能

以下は、まだJSRを取得していないAPIや、既存APIに対する修正によって実現する予定の機能である。全てを挙げるとキリがないので、ここでは代表的なもののみピックアップしてみる。

  • 例外のマルチキャッチおよび安全な再スロー
  • "?"を使ったnullチェック
  • ジェネリクスにおける型推論の拡張
  • 新しいガベージコレクタ("Garbage-First"ガベージコレクタ)
  • Unicode 5.0のサポート
  • 新たなスクリプト言語エンジンの追加

例外のマルチキャッチとは、複数の種類の例外をひとつのcatchブロックで処理できるようにするもの。また安全な再スローとは、キャッチした例外をそのブロック内で再スローする場合にも、キャッチとスローの無限ループに陥らないようにする仕組みである。

"?"によるnullチェックとは、たとえば次のような記述でオブジェクトのnullチェックをできるようにするということらしい。これによってif文でのnullチェックを省略してプログラムをシンプルに書けるようになる。

リスト1

public String getPostcode(Person person) {  
       return person?.getAddress()?.getPostcode();  
}  

またジェネリクスを使う場合により高度な型推論が行われるようになり、たとえば次のような記述が可能になるという。

リスト2

Map<String, List<String>> anagrams = new HashMap<>();  

クロージャはどうした?

おそらく多くのJava開発者が興味を持っているであろうクロージャについてだが、どうやら採用はJava 7の次のバージョンに持ち越される可能性が濃厚になってきたようだ。以下はMark Reinhold氏が挙げているJava 7に"含まれない"であろう機能の一部である。

  • クロージャ
  • JSR 295: Beans Binding
  • BigDecimalのためのシンタックス
  • オペレータ・オーバーロード
  • 言語レベルでのプロパティ

ここにクロージャが含まれている理由は、現時点でまだ仕様が統一されていない上に、乗り越えるべき問題が多すぎるからだという。ただし依然としてクロージャを望む声も多く、またDevoxxの前週に開催されたSun Tech DaysではJames Gosling氏がクロージャを採用すべきだとの発言をしていることから、今後もまだ議論は継続しそうだ。

参考

JSR 295についても(プロパティサポートを含む)いくつかの問題が解決できないことから、議論は先のバージョンに持ち越されるとのこと。オペレータオーバーロードはC++のような無制限なものではなく、BigDecimalやコレクションを扱うための限定的な機能として提案されていたものだが、これも採用は見送られるようだ。

参考

これに加えて、前述のJSR 277やJSR 260 Javadoc Technology Update、言語レベルのXMLサポートなどといった機能も採用が見送られる予定。本連載ではほかに、JSR 303 Beans ValidationJSR 275: Units SpecificationJSR 310: Date and Time APIなどといったAPIもJava 7の新機能候補の一部として取り上げたことがあるが、これらについてはまだ確定的な情報は明らかになっていない。

正式リリースまで1年、引き続き動向をチェックしていきたい。

ご愛読ありがとうございました

さて、60回に渡って続けてきた本連載も今回で終了となります。長い間ご愛読いただき、誠にありがとうございました。連載そのものは終了しますが、Javaに関する新しい動きがあった際には、その都度何らかの形で紹介していけるよう努めてまいります。今後ともどうぞよろしくお願いいたします。

  • >
  • >>

60/60

インデックス

連載目次
第60回 どうなる? 今後のJavaプラットフォーム(Java SE編)
第59回 どうなる? 今後のJavaプラットフォーム(Java EE編)
第58回 Java SE 7の要注目機能"クロージャ"はどうなるのか その6
第57回 Java SE 7の要注目機能"クロージャ"はどうなるのか その5
第56回 Java SE 7の要注目機能"クロージャ"はどうなるのか その4
第55回 Java SE 7の要注目機能"クロージャ"はどうなるのか その3
第54回 Java SE 7の要注目機能"クロージャ"はどうなるのか その2
第53回 Java SE 7の要注目機能"クロージャ"はどうなるのか
第52回 Early Draftが公開されたJSF 2.0
第51回 EJBから独立したJava Persistence 2.0
第50回 モバイルJavaの新しい潮流となるか - MSA 2.0のドラフト公開
第49回 やっぱり基本はServlet - Servlet 3.0のEarly Draftを読む
第48回 JOGLで3Dプログラミング その4
第47回 JOGLで3Dプログラミング その3
第46回 JOGLで3Dプログラミング その2
第45回 JOGLで3Dプログラミング
第44回 JARファイルを効率的にネットワーク転送するためのPack200形式
第43回 Early Draftで把握するEJB 3.1の新機能
第42回 次世代の携帯端末向けJava仕様"MIDP 3.0"はどうなるか その2
第41回 次世代の携帯端末向けJava仕様"MIDP 3.0"はどうなるか その1
第40回 リソースアダプタによる接続の仕組み
第39回 JCAを利用したシステム間接続
第38回 Java EEと外部システムの接続性を支えるJCAがバージョンアップ
第37回 Javaのモジュラリティ強化を担う"スーパーパッケージ"とは
第36回 JSR 308対応のコンパイラを試す
第35回 公開されたJSR 308のEarly Draftを検証する
第34回 スクリプト言語とJavaを結びつけるJSR 223
第33回 Java EE環境に統一されたコンポーネントモデルを提供するJSR 299 その2
第32回 Java EE環境に統一されたコンポーネントモデルを提供するJSR 299 その1
第31回 Javaの文法がそのまま使えるスクリプト言語"BeanShell"
第30回 Javaアプリケーションにオブジェクトのキャッシュ機構を提供するJCache API
第29回 Javaアプリケーションからのリソース管理を可能にするJSR 284
第28回 XMLデータソースへの問い合わせはJSR 225で
第27回 Portlet Specification 2.0をもっと手軽に利用する
第26回 次期Javaポートレット仕様となるJSR 286
第25回 JSFとポートレットをつなげるJSR 301
第24回 Webサービス向けのポートレット仕様「WSRP」
第23回 高い相互運用性を実現するポートレットAPI - JSR 168
第22回 Java EE環境でタスクのスケジューリングを可能にするJSR 236
第21回 Java EE環境でのスレッドプログラミングを可能にするJSR 237
第20回 音声認識/合成のためのAPI - Java Speech APIとJSR 113
第19回 JSR 291でJavaプラットフォームにダイナミックコンポーネントモデルを導入
第18回 JAX-RSで簡単RESTful - JSR 311
第17回 待望のServlet 3.0がJSRに登場 - JSR 315
第16回 アノテーションを使ってバグ退治 - JSR 305
第15回 アノテーションをさらに広い範囲で利用可能にするJSR 308
第14回 Webアプリケーション開発の要となるか - JSF 2.0がJSRに登場
第13回 Webサービス経由でのJMX Agentへの接続を可能にするJSR 262
第12回 Javaアプリケーションのモジュール化をサポートするJava Module System
第11回 "NIO.2"がやってきた - JSR 203: More New I/O APIs for the Java Platform
第10回 JSR 295: Beans Bindingの参照実装を試す
第9回 けっこう便利! 単位を扱うAPI -- JSR 275: Units Specification
第8回 アノテーションでバリデーション - JSR 303: Bean Validator
第7回 Swing開発の救世主となるか - Swing Application Framework
第6回 JavaBeansのプロパティを同期させるバインディングAPI
第5回 誰よりも早く"Java SE 7"を睨む
第4回 日時情報の取り扱いを改善する JSR 310: Date and Time API
第3回 古いAPIも進化している!? - JSR 919: JavaMail 1.4
第2回 JSR 1 リアルタイムJava仕様
第1回 JCPによって進められるJava関連技術の標準化

もっと見る

提供:マイナビ

会員登録はこちら

大学・大学院・短大・専門学生向けの就職情報サイト「マイナビ2010」「マイナビ2009」に今すぐ登録しよう!  大手企業からベンチャー企業までの約13,000社の企業情報を公開、エントリーが可能です。2010年卒予定の方は「マイナビ2010」に、2009年卒予定の方は「マイナビ2009」に登録してください。

毎日コミュニケーションズはプライバシーマークを取得しています。

関連キーワード


人気記事

一覧

イチオシ記事

新着記事