gpt4 book ai didi

java - 在最终类的构造函数中使用 "this"

转载 作者:行者123 更新时间:2023-12-02 06:36:34 24 4
gpt4 key购买 nike

我有一个内部辅助类,我想将它的每个新实例添加到包含类中的映射中,如下所示:

public class SomeService {
private final Map<Integer, ServiceTask> pendingTasksByKey;

private class ServiceTask {
private ServiceTask(int key) {
// initialization...
pendingTasksByKey.put(key, this);
}
}

// the rest of the code follows
}

当我这样做时,NetBeans 提示在构造函数中使用 this 。好吧,我明白了,在一般情况下这是一种危险的做法,因为有人可以扩展我的类,然后我就会泄漏 this 引用一个未完全初始化的对象。我不想关闭这个警告,所以我想我可以将这个类设为final。这样就没有人能够扩展我的类,因此使用 this 应该非常安全,因为此时初始化已完成。但即使我将内部类标记为 final,NetBeans 仍然显示警告。

我是对的还是我错过了什么?仅仅是 NetBeans 太挑剔了吗?除了可能的多线程内存模型问题之外,我想不出这种使用方式有任何危险。

最佳答案

这是特定于 Netbeans 的警告。这是一个提醒,该对象尚未构造,因此可能会出现问题。如果您没有做任何会造成问题的事情,那么您可以忽略它。例如看看这段代码:

class A {
public Object obj;

public A() {
B b = new B();
b.addMe(this);

obj = new Object();
}
}

class B {
ArrayList<A> list = new ArrayList<A>(0);

public void addMe(A a) {
list.add(a);
System.out.println(a.obj.toString());
}
}

这段代码有问题,我不应该忽略“在构造函数中泄漏”警告。

关于java - 在最终类的构造函数中使用 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19581436/

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