Constructor está llamando de nuevo?
-
01-10-2019 - |
Pregunta
Tengo este constructor;
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();
}
Y tengo un método de actualización en la misma clase;
@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
Cuando sigo la corriente desde el depurador, veo que cuando la actualización se llama, en algún lugar del método, el programa entra en el constructor y lo ejecuta de nuevo (super, pageIndex, etc.). ¿Por qué ir al constructor:. D no le dije que ir allí
Puedo hacer un análisis más profundo y ver a dónde va al constructor si lo desea. Por cierto, changedComponentIndex
es una variable estática.
Solución
Me parecería mucho más probable que usted está viendo que la construcción de dos objetos diferentes. Habría que dar más información como un seguimiento de la pila; Aquí ni siquiera han mostrado el constructor se invoca!
Otros consejos
El comportamiento que usted describe es prácticamente imposible. Puede ser que su código es diferente de lo que has demostrado o no estas depurar el código que usted piensa que va a depurar. Sin código completo que podemos ejecutar , eso es todo lo que podemos decir.
¿Está seguro de que la actualización no se llama indirectamente de dentro del constructor, lo que resultaría en un punto de interrupción en la actualización de conseguir disparado.
Trate de establecer un punto de interrupción en el inicio del constructor y al final, a continuación, uno de cada actualización. Al llegar al primer punto de interrupción constructor, pulsa 'continuar' y ver lo que se desencadena punto de interrupción siguiente.
Es multi-hilo de esto? Es posible que se llamó la constructora para una instancia diferente creada en otro hilo?