我有两个课程: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
打印中查看toString
的17:00,但在字段列表中显示null
。如果我点击defaultDirection,则toString
打印会将acceptanceTime
字段显示为null
。
这让我疯了。可能导致这种情况的任何想法?
答案 0 :(得分:2)
这些是Hibernate实体(或JPA或类似实体)吗?在这种情况下,访问字段可能会制造延迟加载魔法和通过getter访问它可能会解决它。
答案 1 :(得分:1)
您必须在duplicateTime的复制构造函数中创建一个新Object。你只能说出它应该指向的地方。
答案 2 :(得分:0)
我认为该代码的作用是,使用不同的引用来访问相同的对象。您需要复制对象。喜欢而不是
this.message = toCopy.message;
你应该
this.message = new String(toCopy.message);