我有一个带方法的门面引擎
getOwner()
我还有另一个名为Car的类和另一个调用者所有者。 Car类还有一个getOwner()方法,而Owner类包含名称,汽车成本和所有者的预算。
所以我有一个初始化引擎的方法,它调用newCARengine类中的构造函数。
public static void iniEngine(String name, int cost) {
model = new newCARengine(name, cost);
}
组合物。发动机舱有一辆车,而且车级有车主。为了成功调用getOwner()方法,我需要使用实例变量(类级变量)来保存对另一个对象的引用,以便从该对象调用该方法。
我的发动机舱:[下方]
public class engine{
private String name;
private int cost;
public Car car;
public engine(String name, int cost){
this.name = name;
this.cost = cost;
}
public Owner getOwner(){
return car.getOwner();
}
}
我通过使用该类“公共汽车”的实例变量来引用Car类;然后允许我使用“car.getOwner();”方法。
我的车类:[下方]
public class Car{
public Owner owner //instance variable to reference the owner class
public Owner getOwner(){
return owner;
}
}
现在我已准备好进入创建Owner对象的Owner类。
我的所有者类别:[下方]
public class Owner{
private String name;
private int cost;
private int budget;
public Owner (String name, int cost){
this.name = name;
this.cost = cost;
}
public Owner (String name, int cost, int budget){
this.name = name;
this.cost = cost;
this.budget = budget;
}
public String getName(){return name;}
public int getCost(){return cost;}
public int getBudget(){return budget;}
}
现在我做错了,因为当我运行iniEngine()方法时,我得到一个nullpointer异常,我相信这是因为没有创建对象。错误是从这里生成的:
return car.getOwner(); //from the ENGINE CLASS
我需要返回一个对象作为我的引擎类的结果。但是对象没有被创建。任何援助将不胜感激。
答案 0 :(得分:0)
我多次查看了您的代码。我不明白你把车主与汽车联系在一起的地方。
这是导致NullPointerException的原因
我建议你提供一个CTOR给Car,它将Owner作为参数,另外,考虑使用setCar方法。
考虑使用以下汽车代码:
public class Car{
public class Car(Owner owner) {
this.owner = owner;
}
private Owner owner //instance variable to reference the owner class
public void setOwner(Owner owner) {
this.owner = owner;
}
public Owner getOwner(){
return owner;
}
}
答案 1 :(得分:0)
样式注释:在引擎中,汽车应该也可能是private
,就像其他字段一样,带有setter或构造函数参数。
似乎有些字段没有设置。我在类似情况下使用的一个调试“技巧”是临时创建字段final
,并查看编译器抱怨的内容。例如,如果有人正在设置engine.car
,它会抱怨。在这种情况下,这是一件好事 - 应该抱怨!而且,如果 nobody 正在设置engine.car
,那就是NPE来自哪里的红旗。
或者,如果您确实有setter / getter,请在其中添加断点(或者,如果您愿意,可以添加System.out.prints)以验证它们是否被调用。或者,暂时重命名它们(我在开头添加“xxx”)以验证编译器是否抱怨,证明有人在调用它们。
答案 2 :(得分:0)
我从未实例化过对象,只对变量进行了删除。
将构造函数更改为
public Engine(String name, int cost) {
car = new Car(new Owner(name, cost));
}
这成功创建了对象,这反过来允许我调用getOwner()方法而不是获取任何NullPointerExceptions。一定是错过了这部分。