3 回答

TA贡献2037条经验 获得超6个赞
this
在构造函数(而不是控制器)中泄漏引用很危险,尤其是在多线程环境中。这是因为在构造函数调用完成之前,对象尚未完全构造。this
因此,从构造函数中泄漏出来意味着外部世界可以访问尚未完全构建的对象。这可能不一定会导致单线程程序出现问题(尽管有可能,但是这种情况下的问题更加明显)。但是,如果this
泄漏到其他线程,则它们实际上可以尝试在对象构造完成之前对对象执行某些操作,这将导致难以发现的错误。

TA贡献1846条经验 获得超7个赞
生活中没有绝对的东西,例如。您必须缴税...或...死亡是不可避免的。但是,“传出this
构造函数总是不好的”是其中之一。
彼得指出的警告是恰当和有效的。this
从构造函数泄漏到引用将被发布给未知或不受信任的客户端的任何方法或上下文中肯定会出现问题。对于尚未构造的对象的引用,发布对任何客户端代码(无论是否受信任)的引用仍然很糟糕,该客户端代码假设它具有对有效且一致的对象的看法。
就是说,this
从构造方法传递到程序包私有的方法绝对没有错,该方法对一组共享公共接口的对象执行公共初始化,特别是在初始化时间长或复杂的情况下。
TL; DR:在我看来,在某些情况下,不仅可以接受this
构造函数的传递,而且实际上希望这样做。

TA贡献1946条经验 获得超4个赞
只是不要这样做。我们只是浪费了很多时间来解决几年前创建的错误,当时有人将构造函数中的“ this”传递给“可信任的”“ package private”方法。随着时间的流逝,该方法逐渐发展壮大,并且未初始化的实例进入了事件队列。构造后只需使用最终的init(),即可成为匿名英雄
添加回答
举报