私はライブラリとしてエクスポートする必要があるプロジェクトを持っています。一部のクラス/メソッドを非表示にしてAndroidライブラリをエクスポートする
プロジェクトには複数のパッケージがあり、ライブラリをホストするアプリケーションからいくつかのパブリックメソッド/クラスにアクセスできないようにします。クイック例:
package test.package1
import test.package2.*;
//Class1 can be accessed from external
public class Class1 {
public Class1() {}
public doSomething(){
//Class2, instead, should be only "library-internal" and not accessed from external
Class2 c2 = new Class2();
c2.doSomething();
}
}
package test.package2
//Library private class
public class Class2 {
public doSomething(){
}
}
私はこの問題について話していた多くの記事を見つけた:
しかし、これらのどれもクリアモード(私にとって)で私の問題を解決していないので、私が間違っているのはパッケージの構造か、もし私の問題に対するエレガントな解決策があるならです。
私はすぐにすべてのクラスを同じパッケージに入れて、外部からアクセスできる欲しいものだけを公開するという問題を解決できると思いますが、それは良い解決策ではないと思います。プロジェクトの可読性。
==============
編集1:私は
は、私が "という名前のパッケージを持っていることを想像し、より具体的なサンプルと私の質問を拡張しようtest.model "ここでは、SQLiteデータベースと対話するすべてのクラスを配置します。
このパッケージに含まれるすべてのクラスは、他のすべての "内部"パッケージによってライブラリ内でアクセス可能でなければなりません。
いつも同じアプリケーションで、私はすべての断片と活動を入れた "test.ui"というパッケージを持っています。これらのすべてのコンポーネントは、 "test.model"パッケージにあるクラスにアクセスする必要がありますが、ライブラリをホストするアプリケーションから "test.model"パッケージを表示する必要はありません。
"test.ui"にあるアクティビティとフラグメントは、ライブラリをホストしているアプリケーションから使用できます。プロジェクト構造の例以下は
:あなたはtest.package1にクラス2を移動する必要があります
//I want that this package is for library "internal" use only
--- package test.model
------ Author.java
------ Book.java
//This package can be accessed from project hosting my library
--- package test.ui
----- BookListFragment.java //Can access, with a private method, to Book class
----- AuthorListFragment.java //Can access, with a private method, to Author class
私は質問を編集し、より具体的にしようとしました。とにかくあなたの返事と時間をありがとう。 – Danno
私はある時点では、あなたのモデルパッケージに何かが公開される必要があると思います。そうでなければ、外部からアクセスできる何もないパッケージのポイントは何ですか。 Java Swingはモデルデリゲート分離を使用し、そのモデルはすべて公開されています。 – Lee
あなたが望むものを与えるかもしれないものは、事実上常に公開されているインターフェースに関してモデルを定義することです。あなたのモデルパッケージにはそれらが実装されていますが、それでもモデルを作成する方法の問題は残ります... – Lee