Java 编译器错误不存在';与类构造函数参数不匹配

Java 编译器错误不存在';与类构造函数参数不匹配,java,class,object,copy-constructor,Java,Class,Object,Copy Constructor,我有四门课:泊车车、泊车计程器、泊车计程器和警察。如果一辆车停的时间超过了应该停的时间,警察类应该“发出一张罚单”,即创建一个新的ParkingTicket对象。ParkingTicket对象作为成员对象具有ParkedCar对象和PoliceOfficer对象(基本上是包含获取罚单的车辆和签发人员的信息的对象)。下面是我的ParkingTicket类的构造函数,我试图在创建ParkingTicket时使用第一个构造函数 来自ParkingTicket类: public ParkingTicke

我有四门课:泊车车、泊车计程器、泊车计程器和警察。如果一辆车停的时间超过了应该停的时间,警察类应该“发出一张罚单”,即创建一个新的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);
}
下面是我在警察课上开罚单的方法。如果我需要发出票据,我会尝试将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开始》中的示例进行学习。我的理解是,当对象是类的成员时,最好创建对象的深度副本,而不是引用同一个副本,以防止外部代码对更改对象进行不必要的访问。我被引入歧途了吗?请给我指出正确的方向或更好的资源,如果你觉得我是,这将是一个很大的帮助。