英文:
Creating exceptions with super constructors
问题
我有一个自定义异常类,如下所示:
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;
}
}
现在我需要将这个抽象类扩展为更具体的异常类:
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 exceeded", accountNo);
this.overdraft = overdraft;
this.amount = amount;
}
public double getAmount() {
return amount;
}
public double getOverdraft() {
return overdraft;
}
}
现在问题在于 super 构造函数。我知道我需要将参数 amount 和 overdraft 也传递给它,但是当我尝试编译时,它提示参数长度不同。我该如何正确调用 super 构造函数,以便能够输出错误消息呢?谢谢!
编辑:我已经添加了构造函数实际的样子(抱歉,我有点笨手笨脚)。稍后在代码中当我实际抛出异常时,我需要传递构造函数的参数。
英文:
I have a custom exception class like the following :
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;
}
Now I need to extend this abstract class to a more specific exception:
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;
}
Now the problem here is the super constructor,I am aware that I need to give it the parameter amount and overdraft as well but when I try to compile it says that the arguments differentiate in length.How do I call the super constructor corectlly, so that I can give out the error message.Thank you!
EDIT:I have added how the constructor actually looks like (sorry I'm a bit clumsy).Later in the code when I actually throw the exception I need to give the parameters of the constructor.
答案1
得分: 5
在你的代码中,你调用了超级构造函数:
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("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"。
英文:
In your code you call the superconstructor with:
super("The overdraft limit has been exceded",accountNo,amount,overdraft);
This passes in 4 arguments:
"The overdraft limit has been exceded"
(String
)accountNo
(int
)amount
(double
)overdraft
(double
)
Your superconstructor is written like this:
public AccountException(String message, int accountNo) {
This accepts 2 arguments:
- A
String
- An
int
You need to make the two argument lists match. Either you need to edit the call to super to be:
super("The overdraft limit has been exceded", accountNo);
OR you need to edit the superconstructor to be:
public AccountException(String message, int accountNo, double amount, double overdraft) {
I suspect you want to use the former because you already use amount
and overdraft
with this code:
this.overdraft = overdraft;
this.amount = amount;
Also, a minor mistake, but you misspelled the word "exceeded" in your message.
答案2
得分: 1
This call
super("The overdraft limit has been exceeded", accountNo , amount, overdraft);
won't work because your super constructor only has 2 parameters.
AccountException(String message, int accountNo)
I'm not sure what you wanted to do, but if you wanted to add the amount and overdraft in the message, you can do something like this, which only passes in a String
and an int
.
super("The overdraft limit has been exceeded by " +
overdraft + ". You had " + amount +
" dollars left in your account.",
accountNo);
You can't expect your AccountException
superclass to know about overdrafts - that's considered bad design. Instead, your OverdraftLimitReachedException
class has to make its own specialized message.
英文:
This call
super("The overdraft limit has been exceded", accountNo , amount, overdraft);
won't work because your super constructor only has 2 parameters.
AccountException(String message, int accountNo)
I'm not sure what you wanted to do, but if you wanted to add the amount and overdraft in the message, you can do something like this, which only passes in a String
and an int
.
super("The overdraft limit has been exceded by " +
overdraft + ". You had " + amount +
" dollars left in your account.",
accountNo);
You can't expect your AccountException
superclass to know about overdrafts - that's considered bad design. Instead, your OverdraftLimitReachedException
class has to make its own specialized message.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论