Java SEの最新情報
JavaOneでは,General Sessionがメディアの注目を集めます。しかし,実際にJavaOneで重要なのは通常のセッションです。
セッションはパラレルで13枠。4日間で,テクニカル・セッションが254(パネルも含む),BOF(Birds of a Feather)が116もあります。内容も多岐に渡り,Javaが多用な用途に使われていることを表しています。
意外に思われるかもしれませんが,セッションではほとんどジョークが出ません注1。講演する方も聞く方も真剣そのもの。セッションの内容が興味深いものだと,質問の列がずらっと並びます。逆に,つまらないと,どんどん人が出て行ってしまいます。こういう点は本当にシビアです。
特に資料が公開されないBOFは一字一句を聞き逃さないよう,真剣にメモをする人が多くいます。また,デジカメで資料を撮る人も多いですね。本当は,会場は写真撮影禁止なのですが,そんなこと誰も気にしません(笑)。かくいう筆者もBOFの資料はすべて写真におさめてあります。
さて,今週はセッションの中でJava SEに関したものを中心に,Java SE 7の最新情報をお送りします。
今週紹介するのは,以下のセッションから得た情報を基にしています。まだ,セッションの資料は公開されていませんが,近日中にJavaOne Onlineで公開されるはずです。
- TS-6271 Java Platform, Standard Edition: A Youthful Maturity
- TS-5581 Upcoming Java Programming-Language Changes
- TS-5515 Let’s Resync: What’s New for Concurrency on the Java Platform, Standard Edition
- TS-5579 Closures Cookbook
- TS-6185 Modularity in Java Platform
- TS-5199 Java Management Extensions (JMX) Technology Update
- TS-5686 New I/O APIs for the Java Platform
- BOF-5031 Upcoming Java Programming Language Features
- BOF-5032 Modularity in the Java Platform: Demos and Q&A
- BOF-5223 VisualVM: Integrated and Extensible Troubleshooting Tool for the Java Platform
Java SE 7で導入される新機能をトピック的にまとめると次のようになります。
- モジュール
- プロファイル
- 言語仕様
- 管理
これ以外にもGUIに関する機能強化や新機能もあるのですが,今回は割愛させていただきました。また,機会があったら紹介したいと思います。これ以降は,トピックごとに新しい機能を紹介していきます。
モジュール
現在のJavaには,開発時のモジュールとしてパッケージ,デプロイメント時のモジュールとしてJARファイルがあります。
これだけでなく,Java SE 7では新しいモジュールが導入されます。
昨年のJavaOneレポートでも紹介したように,新しいモジュールは以下の2つのJSRで議論されていました。
JSR 294が開発時のモジュール,JSR 277がデプロイメント時のモジュールになります。
ところが,開発時とデプロイメント時の両方をまとめて議論すべきだということになり,JSR 294はJSR 277にマージされることになりました。
これにともない,JSR 294において導入を検討していたsuperpackageは,moduleというキーワードに変更されています。
では,まず開発時のモジュールから説明していきましょう。
ライブラリやフレームワークを作成するときを考えて見ます。例としてあげられたのが,NetBeansのクラス構成でした。
org/ netbeans/ core/ Debugger.class ... utils/ ErrorTracker.class ... wizards/ JavaFXApp.class ...
ErrorTrackerクラスは,Debuggerクラスなどorg.netbeans.coreパッケージで使われるユーティリティクラスです。
ユーティリティクラスですから,クラスのアクセス修飾子はpublicになります。しかし,publicにしてしまうとorg.netbeans.coreパッケージ以外のクラスからも使われてしまいます。
同じパッケージであればパッケージプライベートにできますが,パッケージが異なるのでそれもできません。
そこで,導入されたのがモジュールです。
モジュールは複数のパッケージをまとめて,1つの単位とします。そして,モジュールの中だけでアクセスするためのアクセス修飾子moduleが新たに定義されました。
上記の例ではorg.netbeans.coreパッケージ,org.netbeans.core.utilsパッケージ,org.netbeans.core.wizardsパッケージをまとめて,1つのモジュールとします。
モジュールはパッケージ宣言とは別にモジュール宣言で定義します。
上記のDebbuger.javaファイル,ErrorTracker.javaファイルは以下のように定義されます。
org/netbeans/core/Debugger.javaファイル
module org.netbeans.core;
package org.netbeans.core;
public class Debugger {
...
}
org/netbeans/core/utils/ErrorTracker.javaファイル
module org.netbeans.core; package org.netbeans.core.utils; module class Debugger { module int getErrorLine() { ... } ... }
青字のmodule文がモジュールの宣言になります。これを見てもわかるとおり,異なるパッケージでも同じモジュールに属することができます。
そして,赤字で示したのが新しいアクセス修飾子のmoduleです。