Java9 Jigsaw はコンパイラー準拠レベル1.8 だとどうなるのか
こんにちは、開発担当の Masa です。
Java系製品の開発担当としては Java9 のリリースが待ち遠しいような怖いような今日この頃です。
一番の目玉機能である Jigsaw ですが、コンパイラー準拠レベル1.8でコンパイルするとモジュール間のアクセス制御はどうなるんだろう?という素朴な疑問を確かめてみました。
呼び出される側のモジュールです。
誰でも使えるモジュール jp.co.hos.blog
package jp.co.hos.blog;
import jp.co.hos.internal.MyClass;
public class Common {
public void execute() {
System.out.println(this.getClass().getName());
MyClass m = new MyClass();
m.out();
}
}
内部で使うモジュール jp.co.hos.internal
package jp.co.hos.internal;
public class MyClass {
public void out() {
System.out.println(this.getClass().getName());
}
}
jp.co.hos.blog のみ公開するための module-info.java
module hoge {
exports jp.co.hos.blog;
}
呼び出す側のモジュールです。
使用する側のクラス
import jp.co.hos.internal.MyClass;
public class Test {
public static void main(String[] args) {
MyClass m = new MyClass();
m.out();
}
}
アクセス不可能なので、当然「is not accessible」って怒られます。
呼び出される側をコンパイラー準拠レベル1.8でコンパイルします。
↓
↓
module-info.java のコンパイルが通りません。ですよね。知ってました。
以上です。
- 2017/08/17 修正: module-info.java の説明が別パッケージ名になっていたので修正。