构造函数中有多个参数的异常

时间:2011-10-10 14:39:08

标签: java exception parameters constructor override

我想知道在一个构造函数中创建一个具有多个参数的异常(与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不同的异常。

我试图找到有关如何编写明确定义的异常层次结构的信息,但是没有很多文档,也没有关于构造函数的信息。

您如何看待我的方法?

3 个答案:

答案 0 :(得分:5)

这种方法没有错。

事实上,标准库中有一些异常类,其构造函数的参数与StringThrowable不同。

首先想到的例子是SQLException(String, String, int)。然后有URISyntaxException(String, String, int)甚至EnumConstantNotPresentException(Class<? extends Enum>, String)

答案 1 :(得分:0)

我喜欢它。你的另一个选择是格式化字符串并使用普通的Exception构造函数,但我认为你拥有的很好。

答案 2 :(得分:0)

不确定。如果在自定义异常类中有其他参数/​​字段,则在抛出异常时更容易评估问题,请添加。