-1

私はJavaのパッケージ構造を持っており、以下に示すようにアクセスできるはずです。

ここに画像の説明を入力してください

基になるパッケージクラスをミドルパッケージのみがアクセスできるようにするにはどうすればよいですか?TestAppは、インターフェイスパッケージとのみ直接通信する必要があります。TestAppは、基礎となるパッケージクラスと中間パッケージクラスに関する情報を取得するべきではありません。どうやってするの?助けてください

4

3 に答える 3

1

それは無理だ。
クラスへのパッケージ アクセスを設定できますが、他のパッケージからそれらを呼び出すのは困難です。つまり、基本的に、中間パッケージから基になるパッケージへのアクセスは、TestApp から基になるパッケージへのアクセスと同じです。
UPD:継承に関する回答を見ましたが、問題を完全に解決するわけではありません。TestApp の基になるパッケージから継承できます。それを止めるものは何もありません。
UPD2:ちなみに、あなたの要件friendはC++のキーワードを思い出させます。Javaには存在しません。

于 2012-09-24T12:06:49.217 に答える
1

Java で「フレンド」システムを使用して、パッケージ メンバーへのより詳細なアクセスを指定することはできません。パッケージの外部で何かを表示できるようにすると、そのパッケージの外部にあるものはすべてそれにアクセスできます。

TestApp および Interface Package パッケージに共通のパッケージを使用することもできますが、これは意味的に正しくありません。クライアントとインターフェイスを混在させることになります。

モジュール性を強化したい場合、OSGiではユニット内の特定のパッケージを「内部」としてマークすることができます。これらはクライアントにまったく公開 (「有線」) されません。

于 2012-09-24T12:06:57.703 に答える
1

TestApp と Interface を同じパッケージに入れることができます。次に、Interface は、保護されたメソッドを使用する Middle を継承する必要があります。次に、Middle は、パッケージで保護されたメソッドを使用する Underlying の同じ Package 内にあります。

それはあなたが望むことをしますが、正直なところ、私はそれをする意味がありません. そして、「インターフェースパッケージ」はJavaインターフェースではないと仮定しています...

Ceylon 言語は、おそらく Unit Of Code と Modules のより良い概念を持っていますが、Java 6、7、および 8 言語は、他のプログラマーに対して物事を本当に隠す準備ができていません。

于 2012-09-24T12:03:50.957 に答える