我的代码是:
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,但我并不太了解它。
答案 0 :(得分:1)
您正在[{}]
的构造函数中重新分配参数。您需要将其分配到Class1
- 字段。有两种方法可以解决这个问题:
删除参数:
class2
使用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;
}
^这将解决您的问题。