Java 编译器错误不存在';与类构造函数参数不匹配
我有四门课:泊车车、泊车计程器、泊车计程器和警察。如果一辆车停的时间超过了应该停的时间,警察类应该“发出一张罚单”,即创建一个新的ParkingTicket对象。ParkingTicket对象作为成员对象具有ParkedCar对象和PoliceOfficer对象(基本上是包含获取罚单的车辆和签发人员的信息的对象)。下面是我的ParkingTicket类的构造函数,我试图在创建ParkingTicket时使用第一个构造函数 来自ParkingTicket类:Java 编译器错误不存在';与类构造函数参数不匹配,java,class,object,copy-constructor,Java,Class,Object,Copy Constructor,我有四门课:泊车车、泊车计程器、泊车计程器和警察。如果一辆车停的时间超过了应该停的时间,警察类应该“发出一张罚单”,即创建一个新的ParkingTicket对象。ParkingTicket对象作为成员对象具有ParkedCar对象和PoliceOfficer对象(基本上是包含获取罚单的车辆和签发人员的信息的对象)。下面是我的ParkingTicket类的构造函数,我试图在创建ParkingTicket时使用第一个构造函数 来自ParkingTicket类: public ParkingTicke
public ParkingTicket(ParkedCar parkedCarObj, PoliceOfficer officerObj){
this.car = new ParkedCar(parkedCarObj);
this.officer = new PoliceOfficer(officerObj);
}
//Copy constructor, makes new instance a copy of object passed as argument
public ParkingTicket(ParkingTicket obj2){
this.car = new ParkedCar(obj2.car);
this.officer = new PoliceOfficer(obj2.officer);
}
下面是我在警察课上开罚单的方法。如果我需要发出票据,我会尝试将ParkedObject和self-Policer对象(通过使用this
)传递给ParkingTicket构造函数,如下所示。警官班:
public boolean issueTicket(ParkedCar car, ParkingMeter meter){
boolean expired = false;
if (car.getMinsParked() > meter.getMinsPurchased()){
expired = true;
ParkingTicket ticket = new ParkingTicket(car, this); //Compiler error
}
return expired;
}
然而,我实例化新ParkingTicket的那一行抛出了一个编译器错误。信息是:
类ParkingTicket中的构造函数ParkingTicket不能应用于给定类型
必需:驻车
发现:停放的汽车,警官
原因:实际参数列表和正式参数列表长度不同
我很困惑,因为它应该调用第一个重载构造函数,它以一辆停放的汽车和一名警察作为参数。我不确定为什么它会说它只需要ParkedCar的一个论点。如果我只将ParkedCar对象作为参数传递,它可以编译,但我知道这是不正确的,因为我没有将所需的警官信息传递给ParkingTicket对象
有什么想法吗?谢谢你的帮助 我将把答案写在这里,因为我显然在评论中回答了这个问题 错误消息表示它只需要ParkedCar参数。您显示的单参数构造函数具有不同的类型,因此它不是重载问题
由于预期参数是您预期的部分列表,因此它可能是一个过时的
.class
文件。重新编译类,它应该会工作。愚蠢的问题-您是否重新编译代码以确保.class
文件是最新的?错误消息表示它只需要一个ParkedCar
参数。您显示的单参数构造函数具有不同的类型,因此它不是一个重载问题。这造成了很多混乱,在ParkingTicket
的构造函数中,您将ParkedCar
和policer
的实例作为参数传递。在将this.car
和this.officer
分配给this.car
和this.officer
时,为什么要创建ParkedCar
和policer
的新实例?这听起来像是“通过创建具有相同汽车的汽车来为其分配汽车”。除此之外,试着按照dkatzel的建议去做,试着重建你的项目。@dkatzel,如果结果是正确的话,这不是一个愚蠢的问题。仍然习惯于Netbeans IDE,感谢您的建议,它现在正确地将两个对象都作为参数。@eli-我正在学习Java,我将按照Gaddis的《从Java开始》中的示例进行学习。我的理解是,当对象是类的成员时,最好创建对象的深度副本,而不是引用同一个副本,以防止外部代码对更改对象进行不必要的访问。我被引入歧途了吗?请给我指出正确的方向或更好的资源,如果你觉得我是,这将是一个很大的帮助。