我有一个内部助手类,我想将它的每个新实例添加到包含类中的地图中,如下所示:
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
,因为此时初始化已经完成。但即使我将内部类标记为 .NetBeans 仍会显示警告final
。
我是对的还是我错过了什么?只是 NetBeans 太挑剔了吗?除了可能的多线程内存模型问题之外,我想不出这种this
使用的任何危险。