使用组合在Java中创建对象

时间:2017-08-28 12:21:00

标签: java

我的代码是:

public class Class1 {

    Class2 class2;

    public Class1(Class2 class2) {
        class2 = new Class2();
    }

    public void print() {
        class2.printMe();
    }
}

public class Class2 {

    public void printMe() {
        System.out.println("Hi");
    }

}

Print方法抛出空指针,因为没有创建Class2对象。 另外,我不想在构造函数中创建一个对象 - 我正在考虑使用DI,但我并不太了解它。

4 个答案:

答案 0 :(得分:1)

您正在[{}]的构造函数中重新分配参数。您需要将其分配到Class1 - 字段。有两种方法可以解决这个问题:

  1. 删除参数:

    class2
  2. 使用public class Class1 { Class2 class2; public Class1() { class2 = new Class2(); } public void print() { class2.printMe(); } }

    将其分配到正确的字段
    this

答案 1 :(得分:0)

public class Class1{
  Class2 class2;

  public Class1(Class2 class2){
     this.class2=class2;
  }

 }

这是使用构造函数的依赖注入的样子。

答案 2 :(得分:0)

正如汤姆所暗示的那样,你并没有在构造函数中为字段写一个值。相反,你忽略了作为参数给出的实例(如果正确完成,它看起来像是一种做DI的方法!),并用新实例覆盖参数变量。但是,这并不影响该领域。

请尝试使用此构造函数:

public Class1(Class2 class2) {
    this.class2 = class2;
}

答案 3 :(得分:0)

如果变量名称存在歧义(在您的情况下,它可能指向方法参数以及实例字段),您需要添加"这个"指出你指的是什么。否则它将指向方法参数。

public Class1(Class2 class2) {
    this.class2 = class2;
}

^这将解决您的问题。