使用超级构造函数创建异常

Creating exceptions with super constructors

我有一个自定义异常 class,如下所示:

public abstract class AccountException extends BankServiceException {

private int accountNo;

public AccountException(String message, int accountNo) {
    super(message);
    this.accountNo = accountNo;

}

public int getAccountNo() {
    return accountNo;
}

现在我需要将这个抽象 class 扩展为更具体的异常:

public class  OverdraftLimitReachedException extends AccountException {

private double amount;
private double overdraft;

public OverdraftLimitReachedException(int accountNo,double amount,double overdraft) {
 super("The overdraft limit has been exceded",accountNo,amount,overdraft);
    this.overdraft = overdraft;
    this.amount = amount;
}

public double getAmount() {
    return amount;
}

public double getOverdraft() {
    return overdraft;
}

现在这里的问题是超级构造函数,我知道我需要给它参数量和透支,但是当我尝试编译时它说参数在 length.How 中有区别吗?正确调用超级构造函数,这样我就可以给出错误message.Thank you!

编辑:我已经添加了构造函数的实际外观(抱歉我有点笨拙)。稍后在代码中当我实际抛出异常时我需要提供构造函数的参数。

在您的代码中,您通过以下方式调用超构造函数:

super("The overdraft limit has been exceded",accountNo,amount,overdraft);

这里传入了 4 个参数:

  • "The overdraft limit has been exceded" (String)
  • accountNo (int)
  • amount (double)
  • overdraft (double)

你的超构造函数是这样写的:

public AccountException(String message, int accountNo) {

这接受 2 个参数:

  • 一个String
  • 一个int

您需要使两个参数列表匹配。您需要将对 super 的调用编辑为:

super("The overdraft limit has been exceded", accountNo);

您需要将超构造函数编辑为:

public AccountException(String message, int accountNo, double amount, double overdraft) {

我怀疑你想使用前者,因为你已经使用了 amountoverdraft 代码:

this.overdraft = overdraft;
this.amount = amount;

此外,一个小错误,但是您在邮件中拼错了单词 "exceeded"。

这次通话

super("The overdraft limit has been exceded", accountNo , amount, overdraft);

不会工作,因为你的超级构造函数只有 2 个参数。

AccountException(String message, int accountNo)

我不确定你想做什么,但如果你想在消息中添加金额和透支,你可以这样做,只传递一个 String 和一个 int.

super("The overdraft limit has been exceded by " + 
      overdraft + ". You had " + amount + 
      " dollars left in your account.", 
      accountNo);

您不能指望您的 AccountException superclass 了解透支 - 这被认为是糟糕的设计。相反,您的 OverdraftLimitReachedException class 必须制作自己的专门信息。