我想知道在一个构造函数中创建一个具有多个参数的异常(与throwable,string不同)或者这种做法是否错误?
为什么我需要一个带有多个参数的异常,好吧,假设我正在分析一个矩阵,当出现错误时,我会用该位置引发异常。我想在异常中给出一个明确的错误消息,我也想使用国际化,即不同语言的消息。
例如,消息可以是:
位置4,5发生错误。
Hubo un problema en la fila 4 con columna 5。
正如您所看到的,两条消息的文本都不同,这些值对于消息很重要,以便具有描述性。
我的方法是这样的:
public class MatrixException extends Exception {
int x;
int y;
public MatrixException (int x, int y){
this.x = x;
this.y = y;
}
public String getMessage(){
return Messages.getString("MatrixException.Message1") + this.x
Messages.getString("MatrixException.Message2") + this.y
Messages.getString("MatrixException.Message3");
}
}
(Messages
类实现ResourceBundle
类)
有了这种异常,我可以用相应的语言创建描述性消息,但是我从未见过参数与String和Throwable不同的异常。
我试图找到有关如何编写明确定义的异常层次结构的信息,但是没有很多文档,也没有关于构造函数的信息。
您如何看待我的方法?
答案 0 :(得分:5)
这种方法没有错。
事实上,标准库中有一些异常类,其构造函数的参数与String
和Throwable
不同。
首先想到的例子是SQLException(String, String, int)
。然后有URISyntaxException(String, String, int)
甚至EnumConstantNotPresentException(Class<? extends Enum>, String)
。
答案 1 :(得分:0)
我喜欢它。你的另一个选择是格式化字符串并使用普通的Exception
构造函数,但我认为你拥有的很好。
答案 2 :(得分:0)
不确定。如果在自定义异常类中有其他参数/字段,则在抛出异常时更容易评估问题,请添加。