続いて両氏は、JSR 294でスーパーパッケージと合わせて導入を検討しているパッケージインタフェースについて少しだけ紹介した。モジュール化されたプログラムの利点のひとつによく挙げられるのは、完成した部分から逐次コンパイルしていくことができるということだ。しかし現状、あるパッケージをビルドするには依存するパッケージもすべて実装済みでなければならず、分割コンパイルが実現できていない。
そこでパッケージについてインタフェースを用意することで、実装が存在しなくてもそれに依存する他のパッケージをコンパイルできるようにするというのがパッケージインタフェースの狙いだという。パッケージインタフェースにはコンパイルに必要な情報だけを記述する。具体的なコード例としてはリスト3のようなものが紹介された。
リスト3 パッケージインタフェースの定義例
package interface P; import Z.*; class C implements I { public C(int i); protected Object f(); String m() throws Exec; }
このようなインタフェースを用意しておけば、実際にクラスCの実装がなくてもリスト4のようなコードをコンパイルすることができるようになるとのことだ。
リスト4 パッケージインタフェースを利用すればコンパイル可能
package A;
import P.*;
class Client {
C c = new C(5);
... c.f ...
try { c.m(); }
catch (Exec e) { ... }
}
JSR 294はJava SE 7での導入を目指して、現在、仕様の策定作業が進められている。もう一方のモジュラリティである「デプロイメント時のモジュラリティ」を担うJSR 277やJSR 291のメンバーとも情報交換しながら、仕様の一貫性を保つように努力しているという。最初の実装は2007年後半にOpenJDKプロジェクトを介して公開される予定との話だ。