Aprendí recientemente (en una clase basada en C#) que a veces se considera peligroso registrar oyentes de eventos en el constructor de un objeto, porque a dichos oyentes se les da una referencia antes de que el objeto se inicialice por completo, y podría (al menos en teoría) intentar acceder al objeto antes de que se complete la construcción.¿Debería preocuparme por filtrar el puntero "this" en Swing?
Por lo que entiendo, acceder a un objeto antes de que se complete la construcción puede causar un bloqueo, al menos en algunos idiomas ... si no causa un bloqueo, entonces solo nos preocuparía que el registro ocurra último, entonces nuestro objeto está listo para recibir eventos cuando registramos sus oyentes.
Ahora estoy comenzando con una nueva GUI de Swing, y noté que mi práctica estándar al compilar las GUI de Swing es conectar los oyentes de eventos en el constructor.
Parece improbable que los detectores de eventos de componentes Swing sean llamados antes de que el constructor esté completo, ya que presumiblemente no están cableados hasta que el componente se agrega a un contenedor Swing visible, lo cual solo puede ocurrir después de la construcción.
Entonces, ¿hay alguna razón real para evitar ese antipatrón cuando se trabaja en Swing? Y si es así, ¿cuál es la forma más sencilla de hacerlo?
¿No supone eso que los eventos se originarán en el hilo de la interfaz de usuario? Este será a menudo el caso, pero no está garantizado; puede haber eventos de temporizadores y fuentes de datos externas. – DNA
No, pero supone que el hilo que asigna los detectores de eventos estará en el hilo de la interfaz de usuario. –