2016-03-30 4 views
0

クラスAという名前のクラスが1つあり、FunctionAという1つのパブリック関数があります。あるメソッドをいくつかのクラスで呼び出す方法はありますが、残りはできませんでしたか?

ClassBという別のクラスがありますが、FunctionAを使用する必要があり、ClassAのサブクラスではありません。

ClassCという名前の3つ目のFunctionAは、ClassCによって呼び出されるべきではなく、ClassAのサブクラスではありません。

さらに、ClassBとClassCの関係は継承ではありません。

解決策がいくつか提供されていますか?または適切なデザインパターンがある場合は?

ありがとうございました。

+0

[ここ]クラスBのために提供された方法を見ていないこのようにクラスCのクラスCによって使用されるインタフェースのACによって使用されるインタフェースABを実装(http://stackoverflow.com/questions/182278/is-there-a-way-to-simulate-the-c-friend-concept-in-java)はあなたに役立つかもしれない関連する質問です。 –

+0

こんにちは@JornVernee、あなたは私を助けました。あなたのリンクから、私はSalomon BRYSから最も適切な答えを得ました。ありがとう。 – Ivan

答えて

3

あなたは、同じパッケージ(およびその他におけるClassC)にClassAClassBを配置し、方法FunctionAのためのアクセス修飾子をpackage-private(またはdefault)を使用することができます。

この溶液を(任意の言語レベルおよび任意JVM実装で動作する)が最も簡単であり、唯一のJLS specsを使用する:

例6.6から4。 パッケージアクセスフィールド、方法、およびコンストラクタへのアクセス

、公共の保護、またはプライベートアクセス修飾子のどれもが、パッケージアクセスを持っているクラスのメンバまたはコンストラクタを指定されていない場合:それはアクセス可能ですクラスメンバーが宣言されたクラスの宣言が含まれているが、クラスメンバーまたはコンストラクターには、他のパッケージではアクセスできません。反射、コード生成など - - あなたの問題に対処するための

他の方法は、はるかに複雑で、バギー、遅い

PS:も方法FunctionA公共残して、にあなたのアプリケーションを分解することが可能です2つのモジュール。最初のモジュールでは、ClassAClassBを、第2のClassCに配置してください。最初のモジュールは2番目を依存関係として使用できますが、2番目のモジュールは最初のモジュールへのアクセス権を持たないようにしてください。この方法では、複雑なアプリケーションに適していると私は

+0

私は最後の部分のポイントを得ることができません 'アプリケーションを分解する...'、あなたはいくつかのキーコードを提供できますか?さらに、私がもっと解決したいのは、クラスAとクラスBが同じパッケージに入っていないということです。 @Cootri – Ivan

+0

ええ、ちょうどgoogle ** "mavenマルチモジュールプロジェクト" **の出発点です。 Webにはたくさんの例があります:http://www.codetab.org/apache-maven-tutorial/maven-multi-module-project/、http://www.mastertheboss.com/jboss-frameworks/maven-チュートリアル/ jboss-maven/maven-multi-module-tutorialなど – Cootri

1

たぶん(大規模なアプリケーションのための非常にトリッキーなこともある)ように配向依存グラフを処理するために、このようなMavenGradleとしてビルドツールを使用することをお勧めInterface segregation principle、SOLID原則の一つあなたの問題を解決することができます。

メイククラスA、クラスBおよび

関連する問題