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

2022-09-03 01:54:27

查看以下代码:

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;
    }
}

我需要访问某些方法以及其他属性。有没有办法在不传递处理程序构造函数中传递源类的情况下执行此操作。我真的不喜欢这个解决方案的“外观”。ClassAattrClassAHandler


答案 1

从构造函数内部传递到另一个方法/对象可能相当危险。对象通常满足的许多保证不一定是正确的,当从构造函数内部查看它们时。this

例如,如果您的类具有(非)字段,则通常可以依赖于将其设置为值并且永远不会更改。finalstatic

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

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


答案 2

创建一个 registerHandler(ClassA handler) 方法。

没有办法为处理程序不知道的内容创建处理程序。