在初始化之前将对象传递给构造函数

问题描述

| 我有以下问题。这是我拥有的某些类的简单示例(每个类都依赖于其他类)。
public Class1()
{
  public Class1(Class2 class2)
 {

 }
}

public Class2()
{
  public Class2(Class3 class3)
 {

 }
}

public Class3()
{
 public Class1 class1;
 public Class3(Class1 class1)
 {
     this.class1 = class1;
 }
}
然后,我有以下代码初始化对象。
Class1 class1 = null;
Class2 class2 = null;
Class3 class3 = null;

class3 = new Class3(class1);
class2 = new Class2(class3);
class1 = new Class1(class2);

Assert.IsNotNull(class3.class1)
我的问题是,即使class1已被初始化,该assert始终为null。我确实有一个条件是,我只希望每个类创建一个实例。 任何人都可以建议确保断言通过的最佳方法。     

解决方法

        创建class3时,class1未初始化为其对象,因此class3的实例为null。 通过此测试的正确方法是:
Class1 class1 = null;
Class2 class2 = null;
Class3 class3 = null;

class1 = new Class1();
class3 = new Class3(class1);
class2 = new Class2(class3);
class1.Class3 = class3;

Assert.IsNotNull(class3.class1)
    ,        呼叫时,
class1
为null:
class3 = new Class3(class1);
因此,断言自然会失败。您需要实例化class1,然后再尝试将其传递给.5ѭ构造函数。 现在,由于您有循环引用,因此这并非易事。因此,您需要做的是先创建对象,然后修复引用。将构造与引用对其他对象的分配分离。 此外,您不应命名对象实例
class
,因为它们是对象而不是类。区别很重要。     ,        最初,class1变量是空指针。然后,给它分配一些值,参考值将更改。但是class3.class1仍然指向null。 您需要确保引用不变,但它指向的值会改变。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...