5

と の 2 つのクラスがAbstractMailingDirectionsありDirectionLoadます。両方とも、次のようなコピー コンストラクターを持ちます。

public AbstractMailingDirections(AbstractMailingDirections toCopy) {
    this.message = toCopy.message;
    this.defaultDirection = new DirectionLoad(toCopy.defaultDirection);
    for (final DirectionLoad dls : toCopy.directionLoads) {
        this.directionLoads.add(new DirectionLoad(dls));
    }
}

public DirectionLoad(DirectionLoad toCopy) {
    this.direction = toCopy.direction;
    this.transportationContract = toCopy.transportationContract;
    this.pickUpTime = toCopy.pickUpTime;
    this.acceptanceTime = toCopy.acceptanceTime;
    this.acceptanceLocation = toCopy.acceptanceLocation;
    this.information = toCopy.information;
}

MailingDirectionsコピー コンストラクター (これは単なる)を呼び出すと、コピーされたsuper(toCopy)フィールドが取得されないことがありますdefaultDirection。またはそれらのすべてではありません。そして、Eclipse デバッガーの使用はさらに奇妙です。

デバッガAbstractMailingDirectionsここで、コピー する をクリックしました。プリントdefaultDirection.acceptanceTimeでは 17:00 ですが、フィールド リストには表示されます。defaultDirection をクリックすると、フィールドが として表示されます。toStringnulltoStringacceptanceTimenull

これは私を夢中にさせています。これを引き起こしている可能性のあるアイデアはありますか?

4

3 に答える 3

2

これらの Hibernate エンティティ (または JPA など) ですか? その場合、フィールドにアクセスすると遅延読み込みの魔法が壊れ、ゲッターを介してアクセスすると修正される可能性があります。

于 2013-04-25T11:46:11.473 に答える
0

そのコードが何をしているのか、異なる参照で同じオブジェクトに到達すると思います。オブジェクトをコピーする必要があります。代わりに好き

this.message = toCopy.message; 

あなたがすべき

this.message = new String(toCopy.message);
于 2013-04-25T10:32:24.380 に答える