使用超级构造函数创建异常
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) {
我怀疑你想使用前者,因为你已经使用了 amount
和 overdraft
代码:
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 必须制作自己的专门信息。
我有一个自定义异常 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) {
我怀疑你想使用前者,因为你已经使用了 amount
和 overdraft
代码:
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 必须制作自己的专门信息。