gpt4 book ai didi

java - 在构造函数中泄漏这个 - 在哪里正确添加需要 "this"的监听器和其他方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:55 25 4
gpt4 key购买 nike

我有一个扩展 JPanel 的类。在其构造函数中,我将 this 传递给其他方法,主要是将 jpanel 对象作为监听器添加到 jpanel 中的容器/控件(以及其他对象)。由于 Netbeans 对这些调用显示了 leaking this in constructor 警告,因此我将它们放在从构造函数调用的另一个方法中。

之前:

class Foo ... {
public Foo() {
initComponents();
tabX.addChangeListener(this); // <- netbeans complains here
}

之后:

class Foo ... {
public Foo() {
initComponents();
initListeners();
}

protected void initListeners() {
tabX.addChangeListener(this);
}

这消除了症状。但我怀疑它是否解决了 netbeans 显示警告的原因。 在 JPanel 派生类中进行这种初始化的正确位置在哪里?

最佳答案

我想知道这里是否存在更大的问题——要求您的类(class)做太多事情。一个类应该有一个主要目的,一个 View 应该负责 View ,仅此而已。让它执行模型或控制功能,你会失去 cohesion , 可能会增加 coupling并冒着创建很难甚至不可能调试或扩展的上帝对象的风险。所以坦率地说,您的 GUI 或 View 类应该也是监听器类。换句话说,GUI 类也实现监听器接口(interface)没有好的理由,也有很多不好的理由。

最佳解决方案:不要让您的 GUI 类实现监听器。而是使用匿名内部类或私有(private)内部类,或者如果足够复杂或者您预计将来会扩展和/或修改您的代码,则使用独立的监听器类。

关于java - 在构造函数中泄漏这个 - 在哪里正确添加需要 "this"的监听器和其他方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9774109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com