2012-03-05 8 views
4

これは愚かな質問のようには聞こえないことを願っています。Javaクラスとコンストラクタ

私はクラスAとクラスBを持っています。今度は、Bには唯一の文字列IDがあります。 今度は、それぞれがB型のオブジェクトを0以上持つことができる複数のオブジェクトAを持つことができます。 これらはそれぞれのクラスAが持つHas​​hMap(ID、someData)に含まれています。

クラスAに新しいIDを追加して、すでにある が他のクラスAオブジェクトのいずれかに同じIDを持つタイプBのオブジェクトであるかどうかをチェックします。新しいBオブジェクトを作成します。

希望はこれが理にかなっています。私が間違っていることが何らかの方法であるなら、十分に説明してください これは悪い習慣または概念的に間違っている方法です。

ありがとうございます。

EDIT:私の場合、すべてのオブジェクトに対してHashMap(ID、someData)を共有することはもっと賢明ではありません。たとえば、AがCourseクラス、Catalog、Bankなどとしましょう。各Aクラスはいくつかの学生/クライアントを共有することができるが、各Aクラスは異なるクラスBオブジェクトを含むことができる。

答えて

4

あなたがInstance Manager Patternを実装しているように、悪い習慣ではありません。

  • 能力は、管理対象オブジェクト(複数可)の(キーを経由して)1つ以上のインスタンスをルックアップします。管理対象オブジェクトが1つだけの場合、キーは必要ありません。
0

これを実行する必要があるのは、すべてのAオブジェクトのコレクションをすべてチェックできるようにすることです。より多くのAオブジェクトを取得するにつれ、これはより非効率になります。 diiferentはあなたがコレクションとしてIDを使用するかもしれないことを構造化することでした。

Map<ID,/* class with A and someData *> map = ... 

これはあなたの目的を達成するために、すべてのA.

0

渡っIDの一意性を確保することができ、あなたの代わりに、インスタンス変数の、HashMapのstatic変数にすることができます。したがって、クラスAのすべてのインスタンスで共有されます。

0

私はあなたでしたが、私はB_Factoryクラスを作成しました。このクラスは、Bオブジェクトの作成を担当します。クラスオブジェクトは、B_Factoryメソッドを呼び出してBオブジェクトを追加または削除します。 B_Factoryの内部では、Mapを使用してBオブジェクトのインスタンスを格納できます。

すべてのAインスタンスに注入されるB_Factoryクラスのインスタンスは1つだけでなければなりません。

0

すべてのAインスタンスをループし、Hashmaps containsKeyメソッドを使用して、新しいB値がすでに格納されているかどうかを確認する必要があります。すべてのB値をすべてのAクラスに一度だけ保存する必要がある場合は、HashMapフィールドに静的修飾子を追加できます。

関連する問題