5

我有两个班级:AbstractMailingDirectionsDirectionLoad。两者都有一个复制构造函数,如下所示:

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如何toString显示null在字段列表中。如果我单击默认方向,它的toString打印将显示该acceptanceTime字段为null.

这让我发疯了。有什么想法可能导致这种情况吗?

4

3 回答 3

2

这些是 Hibernate 实体(或 JPA 或类似实体)吗?在这种情况下,访问字段可能会破坏延迟加载的魔力,而通过 getter 访问它可能会修复它。

于 2013-04-25T11:46:11.473 回答
1

您必须在您的复制构造函数中为接受时间创建一个新对象。你只告诉参考它应该指向的地方。

于 2013-04-25T10:24:32.723 回答
0

我认为该代码的作用是使用不同的引用到达相同的对象。您需要复制对象。喜欢而不是

this.message = toCopy.message; 

你应该

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