构造函数再次被称为?
-
01-10-2019 - |
题
我有这个构造函数;
public UmlDiagramEntity(ReportElement reportElement, int pageIndex, Controller controller) {
super(reportElement.getX1(), reportElement.getY1(), reportElement.getX2(), reportElement.getY2());
setLayout(null);
this.pageIndex = pageIndex;
this.controller = controller;
reportElements = reportElement.getInternalReportElements();
components = new ArrayList<AbstractEntity>();
changedComponentIndex = -1;
PageListener p = new PageListener();
this.addMouseMotionListener(p);
this.addMouseListener(p);
setPage();
}
我在同一类中有一个更新方法;
@Override
public void update(ReportElement reportElement) {
if (changedComponentIndex == -1) {
super.update(reportElement);
} else {
reportElements = reportElement.getInternalReportElements();
if (components.size() == reportElements.size()) {
if (!isCommitted) {
if (reportElement.getType() == ReportElementType.UmlRelation) {
if (checkInvolvementAndSet(changedComponentIndex)) {
anchorEntity(changedComponentIndex);
} else {
resistChanges(changedComponentIndex);
}
return;
}
}
..................goes on
当我遵循调试器的流程时,我会发现当调用更新时,方法中的某个地方,程序将进入构造函数并将其再次执行(Super,PageIndex等)。它为什么转到构造函数:di没有告诉它去那里。
我可以进行更深入的分析,看看构造函数的位置。顺便一提, changedComponentIndex
是静态变量。
解决方案
我发现您看到它构造了两个不同的对象更有可能。您必须提供更多信息,例如堆栈跟踪;在这里,您甚至没有显示被调用的构造函数!
其他提示
您描述的行为几乎是不可能的。您的代码与您所显示的内容有所不同,或者您没有调试您认为要调试的代码。没有 我们可以运行的完整代码, ,这就是我们可以说的。
您确定该更新不会从构造函数内间接调用,这将导致更新触发的断点。
尝试在构造函数的开头和末尾设置一个断点,然后在更新中设置一个断点。当您击中第一个构造函数断点时,点击“继续”,然后查看下一步触发哪些断点。
这是多线程吗?是否可以调用在另一个线程上创建的其他实例的构造函数?
不隶属于 StackOverflow