2016-05-03 4 views
0

私はライブラリとしてエクスポートする必要があるプロジェクトを持っています。一部のクラス/メソッドを非表示にして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 

答えて

0

、その後、あなたがレベルをパッケージ化するために、公共からのクラス2の可視性を変更した場合(つまり、国民の単語を削除'クラス宣言から)これはあなたが望むことをするはずです。

本当にクラスをパッケージの周りに移動したくない場合は、もっと複雑なJava OOPのやりとりを見なければなりません。

あなたのクラスがやっている操作のタイプについてもっと具体的に言えば、より良い例が得られるかもしれません。

+0

私は質問を編集し、より具体的にしようとしました。とにかくあなたの返事と時間をありがとう。 – Danno

+0

私はある時点では、あなたのモデルパッケージに何かが公開される必要があると思います。そうでなければ、外部からアクセスできる何もないパッケージのポイントは何ですか。 Java Swingはモデルデリゲート分離を使用し、そのモデルはすべて公開されています。 – Lee

+0

あなたが望むものを与えるかもしれないものは、事実上常に公開されているインターフェースに関してモデルを定義することです。あなたのモデルパッケージにはそれらが実装されていますが、それでもモデルを作成する方法の問題は残ります... – Lee

関連する問題