在java构造函数中传递“this”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

看看下面的代码:

public class ClassA {
    private boolean ClassAattr = false;

    public ClassA() {    
        ClassAHandler handler = new ClassAHandler(this);
    }
}

public class ClassAHandler extends GeneralHandler {
    ClassA ca = null;

    public ClassAHandler(ClassA classa) {
        this.ca = classa;
    }
}

我需要访问ClassAattr一些ClassAHandler方法,以及其他属性。如果没有在处理器构造函数中传入origin类,有没有办法做到这一点。我不太喜欢这个解决方案如何“看起来”。

提问于
用户回答回答于
用户回答回答于

传递this给构造函数内的另一个方法/对象可能相当危险。当从构造函数中查看对象时,通常可以满足的许多保证不一定是真实的。

例如,如果你的班级有一个final(非static)字段,那么你通常可以依靠它被设置为一个值并永不改变。

当您查看的对象当前正在执行其构造函数时,那么该保证不再成立。

作为替代方案,您可以延迟ClassAHandler对象的构造,直到首次需要为止(例如,通过在该属性的getter中执行延迟初始化)。

扫码关注云+社区