最近在看《Java并发编程实战》这本书的“3.2 发布与逸出”章节时,对“this”引用在对象构造方法中逸出问题的解决方法有点小疑惑。
书上是这么说的:
如果想在构造函数中注册一个事件监听器或启动线程,那么可以使用一个私有的构造函数和一个公共的工厂方法,从而避免不正确的构造过程。
代码:
public class SafeListener {
private final EventListener listener;
private SafeListener() {
listener = new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
}
}
public static SafeListener newInstance(EventSource source) {
SafeListener safe = new SafeListener();
source.registerListener(safe.listener);
return safe;
}
}
我的疑惑就是,为什么构造方法一定要声明成private?我觉得声明成public应该也没问题吧?
经过一番思考,想到一个场景,就是子类继承情况,如果构造方法声明成public,那么子类重载父类构造方法也是有可能引入“构造方法中“this”逸出问题”的吧?
不知道有没有大佬有别的更合理的理解,还请指导一下!
最后发一篇在网上参考的文章,个人觉得比书里讲的要好些的:Java并发编程——this引用逸出("this"Escape)
网友评论