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 の説明が別パッケージ名になっていたので修正。