编译器错误与类构造函数参数不匹配

时间:2018-02-01 04:07:14

标签: java class object copy-constructor

我有四个班:ParkedCar,ParkingMeter,ParkingTicket和PoliceOfficer。 PoliceOfficer类应该“发出一张票”,即如果一辆汽车停放的时间超过应有的长度,则创建一个新的ParkingTicket对象。 ParkingTicket对象具有ParkedCar对象和PoliceOfficer对象作为成员对象(基本上包含车辆获取票证的信息的对象,以及发布人员)。下面是我的ParkingTicket类的构造函数,我正在尝试使用第一个创建ParkingTicket。

来自ParkingTicket课程:

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);
}

我在PoliceOfficer课程中发出票证的方法如下。如果我需要发出票证,我会尝试将ParkedObject和自我PoliceOfficer对象(使用this)传递给ParkingTicket构造函数,如下所示。
来自PoliceOfficer类:

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的行会引发编译器错误。消息是:

  

类ParkingLicket中的构造函数ParkingTicket不能应用于给定类型;

     
    

必需:ParkedCar

         

发现:ParkedCar,PoliceOfficer

         

原因:实际和正式的参数列表长度不同

  

我很困惑,因为它应该调用第一个重载的构造函数,它将ParkedCar和PoliceOfficer作为参数。我不确定为什么说它只应该采用ParkedCar的一个参数。如果我只传递一个ParkedCar对象作为参数,它编译得很好,但我知道这是不正确的,因为我没有将所需的PoliceOfficer信息传递给ParkingTicket对象。

有什么想法吗?感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我会把答案放在这里,因为我在评论中显然已经回答了。

错误消息表明它只需要一个ParkedCar参数。您显示的单个参数构造函数具有不同的类型,因此它不是过载问题。

由于预期参数是您预期的部分列表,因此它可能是陈旧的.class文件。重新编译类,它应该工作。