我应该担心在Swing中泄漏“this”指针吗?

2022-09-02 14:10:51

我最近了解到(在基于C#的类中),在对象的构造函数中注册事件侦听器有时被认为是危险的,因为这些事件侦听器在对象完全初始化之前被赋予对该对象的引用,并且可以(至少在理论上)在构造完成之前尝试访问该对象。

据我所知,在构造完成之前访问对象可能会导致崩溃,至少在某些语言中是这样......如果它不会导致崩溃,那么我们只会关心注册最后发生,所以我们的对象在注册其侦听器时准备好接收事件。

我现在开始使用新的 Swing GUI,并注意到我在构建 Swing GUI 时的标准做法是在构造函数中连接事件侦听器。

在构造函数完成之前调用 Swing 组件的事件侦听器似乎不太可能,因为它们在将组件添加到可见的 Swing 容器之前可能不会连接起来,这只能在构造之后发生。

那么,在Swing工作时,有没有真正的理由避免这种反模式呢?如果是这样,最简单的方法是什么?


答案 1

只要在 UI 线程中分配事件侦听器,就可以了。


答案 2

当然,行业标准 Swing 编程中的构造函数通常太大,不需要继承。只要你是明智的,并且在施工完成之前不要启动任何事情(导致事件被解雇),你应该没事。(显然,请遵守AWT EDT。


推荐