0

"Family"と呼ばれるオブジェクトを Java で実装したかっただけです。そのコンストラクターで、このオブジェクトを隣接するオブジェクトにリンクしたいので、Family -Object を作成するときは最大値が必要です。他の 2 つのファミリオブジェクト。

public class Family {

    Family leftNeighbour;
    Family rightNeighbour;

    public Family(Family leftNeighbour, Family rightNeighbour) {
        this.leftNeighbour = leftNeighbour;
        this.rightNeighbour = rightNeighbour;
    }   
}

今、私は 3 つのファミリの初期化を開始しまし Aた。最初のファミリは、右隣のみ、B2 つ、C最後のファミリ、左隣のみです。

問題:

Family A = new Family(null,B);
Family B = new Family(A,C);
Family C = new Family(B, null);

Bがまだ作成されていないため、Aを初期化できません。また、Aが欠落しているため、Bを初期化できません。ゲッターとセッターなしでこれを解決する可能性はありますか(大量のファミリ オブジェクトが必要な場合に備えて、少し見苦しいと思います)。

4

3 に答える 3

5

これをコンストラクターに追加できます。

if (leftNeighbour != null)
  leftNeighbour.rightNeighbour = this;
if (rightNeighbour != null)
  rightNeighbour.leftNeighbour = this;

それで:

Family A = new Family(null, null);
Family B = new Family(A, null);
Family C = new Family(B, null);

しかし、これはむしろ間違いを起こしやすいです。

より良い方法 - 「makeNeighbours」メソッド:

public class Family {
    Family leftNeighbour;
    Family rightNeighbour;

    public Family() {}

    public static makeNeighbours(Family leftNeighbour, Family rightNeighbour)
    {
        leftNeighbour.rightNeighbour = rightNeighbour;
        rightNeighbour.leftNeighbour = leftNeighbour;
    }
}

それで:

Family A = new Family();
Family B = new Family();
Family C = new Family();
Family.makeNeighbours(A, B);
Family.makeNeighbours(B, C);

関連する代替手段-makeNeighbours可変数のパラメーターを使用します
(Ray Toalの回答に触発されました):

public static makeNeighbours(Family... families)
{
   for (int i = 1; i < families.length; i++)
   {
      families[i-1].rightNeighbour = families[i];
      families[i].leftNeighbour = families[i-1];
   }
}

それで:

Family A = new Family();
Family B = new Family();
Family C = new Family();
Family.makeNeighbours(A, B, C);
于 2013-06-02T20:09:47.697 に答える
1

createSequenceOfFamilies最善の方法は、必要なファミリーの数を示す整数によってパラメーター化されたパブリック静的メソッドを作成することです。そのメソッド内で、leftNeighbourおよびrightNeighbourフィールドを直接設定できます。

そうすれば、セッターを回避し、オブジェクトを不変のままにすることができます。

あなたの呼び出しは次のようになります

Family a = Family.createSequenceOfFamilies(3);

次に、あなたが呼ぶものbは になりa.getRightNeighbour()、あなたは にcなりますb.getRightNeighbour()

于 2013-06-02T20:09:29.047 に答える