問題

私はAPIパッケージだけがアクセス可能なjarファイルを持っていたいと思います。他のすべてのパッケージ(実装を含む)は、別のjar(または他のクラス)からアクセスできません。

出来ますか?

はいの場合、どうですか?

  ベストアンサー

現在、Java 8(2012?)にスケジュールされているのは、 JSR 294 です。このJSRは、より良いモジュール化言語構造をJavaに導入します。

今日、実装は複数のパッケージに分割できます。そのような実装のサブパーツは、周囲のソフトウェア環境以外にもっと密接に結合する必要があります。今日のデザイナーは、実装の他の部分によって必要とされるプログラムの要素をパブリックとして宣言することを強制され、グローバルにアクセスできるようになります。

代わりに、実装全体を単一のパッケージに配置することができます。これは上記の問題を解決しますが、unwieldyであり、すべてのサブパーツのすべての内部を互いに公開します。

予想される言語の変更は、これらの問題を解決します。特に、既存のパブリックアクセス制御が言語レベルモジュール内でのみ適用され、モジュール外からのAPIへのアクセスがAPIのモジュールに明示的にエクスポートされる言語レベルでモジュール(スーパーパッケージ)の新しい概念を導入することを期待しています。

今私は専門家グループがまだこの概念の詳細について議論していると信じています。しかし、私はあなたがこれを行うことができるかもしれない1つのことを信じています(ソース: Java 7.0 のスーパーパッケージ):

 superpackage com.myorg.myApp.model
{
    member package com.myorg.myApp.model.swing;

    member package com.myorg.myApp.model.html;

    export com.myorg.myApp.model.swing.SEmployee;
    export com.myorg.myApp.model.swing.SDepartment;

    export package com.myorg.myApp.model.html;
}
 

言い換えれば、与えられた "superpackage"に対して、publicのような可視性キーワードから独立して、何がエクスポートされていないかを定義することができます。

  同じタグがついた質問を見る

javajar