奇怪的复制构造函数

时间:2013-04-25 10:18:02

标签: java constructor

我有两个课程: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调试器甚至更奇怪:

Debugger 在这里,我点击了要复制的AbstractMailingDirections。在defaultDirection.acceptanceTime打印中查看toString的17:00,但在字段列表中显示null。如果我点击defaultDirection,则toString打印会将acceptanceTime字段显示为null

这让我疯了。可能导致这种情况的任何想法?

3 个答案:

答案 0 :(得分:2)

这些是Hibernate实体(或JPA或类似实体)吗?在这种情况下,访问字段可能会制造延迟加载魔法和通过getter访问它可能会解决它。

答案 1 :(得分:1)

您必须在duplicateTime的复制构造函数中创建一个新Object。你只能说出它应该指向的地方。

答案 2 :(得分:0)

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

this.message = toCopy.message; 

你应该

this.message = new String(toCopy.message);