Pét*_*rök 60
this在构造函数(而不是控制器)中泄漏引用是危险的,尤其是在多线程环境中.这是因为在构造函数调用完成之前,对象尚未完全构造.this因此,从构造函数泄漏意味着外部世界可以访问尚未完全构造的对象.这可能不一定会导致单线程程序出现问题(尽管有可能,但在这种情况下问题更加明显).但是如果this泄露给其他线程,它们实际上可以在构造完成之前尝试对该对象做一些事情,这会导致细微且难以发现的错误.
sco*_*ttb 11
生命中几乎没有绝对,例如.你必须纳税......或者......死亡是不可避免的.但是"传递this出一个构造函数总是坏的"是 - 不是其中之一.
彼得指出的警告都是恰当和有效的.this从构造函数泄漏到将引用发布到未知或不可信客户端的任何方法或上下文中肯定会有问题.将尚未完全构造的对象的引用发布到任何客户端代码(无论是否受信任)仍然很糟糕,该代码在假设它将具有对有效且一致的对象的视图的情况下运行.
也就是说,this从构造函数传递到package-private方法完全没有错,该方法在共享公共接口的一组对象上执行公共初始化,特别是如果该初始化是冗长或复杂的.
TL; DR:在某些情况下,在我看来,不仅可以接受this从构造函数传递,而且实际上是可取的.