抛出自定义异常Java的函数

时间:2018-04-21 09:15:43

标签: java

嗨,我应该为学校制作一个Java程序,而且我一直在创建一个抛出自定义异常的函数。

public class ParkingSpace implements ParkingPlace {
    private Automobile P_Car;
    public void placeCar(Car car) throws NoFreePlaceException{
        if(this.P_Car == null) {
            throw new NoFreePlaceException(car);
        }
        this.P_Car = (Automobile) car;
    }
}

自定义例外:

public class NoFreePlaceException extends Exception {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public NoFreePlaceException() {
        super("There is no free place for the current car");
    }

    public NoFreePlaceException(Car car) {
        super ("There is no free place for the current car with plate number: " + car.getLicensePlateNumber());
    }
}

但是我总是在尝试输入错误时遇到错误。

  

异常NoFreePlaceException与ParkingPlace.placeCar(Car)ParkingSpace.java中的throws子句不兼容
  / NOS_LB2 / src / at / fhsalzburg / its / nos / parksim第41行   Java问题

根据我的教授的说法,我应该像这样实施。我非常精通C ++,但对Java来说仍然相对较新。

2 个答案:

答案 0 :(得分:2)

此错误是由于重写方法的签名与接口中的方法不匹配。

只需修改placeCar() 界面中的ParkingPlace方法,如下所示:

void placeCar(Car car) throws NoFreePlaceException

答案 1 :(得分:1)

请检查您的界面来源。这些实现只允许抛出更具体的异常。在你的情况下,我相信你需要的是

interface ParkingPlace {
    // here it could also be throws Exception
    // but that is considered a bad practice
    void placeCar(Car car) throws NoFreePlaceException;
}

抛出异常(而不是特定的异常)是一种不好的做法,因为它们还涵盖了各种运行时错误(未经检查的异常),在大多数情况下,这些错误不应在业务逻辑代码中处理。一般来说,我强烈建议阅读Java中的异常,因为它是最重要的主题之一。

Guide on Java exceptions

Java: checked vs unchecked exception explanation