Исключение с несколькими параметрами в конструкторе - PullRequest
5 голосов
/ 10 октября 2011

Я хотел бы знать, нормально ли создавать исключение с несколькими параметрами в одном конструкторе (отличном от throwable, string) или это плохая практика?

Зачем мне нужно исключение с несколькимипараметры, ну, давайте предположим, что я анализирую матрицу, и когда возникает ошибка, я подниму исключение с позиции.Я хотел бы дать четкое сообщение об ошибке в исключении, а также я хотел бы использовать интернационализацию, то есть сообщения на разных языках.

Например, сообщения могут быть:

Есть ошибка в позиции 4, 5.
Hubo un problemma 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 ]

5 голосов
/ 10 октября 2011

В этом подходе нет ничего плохого.

На самом деле в стандартной библиотеке есть несколько классов исключений с конструкторами, которые принимают аргументы, отличающиеся от String и Throwable.

Первый пример, который приходит на ум, это SQLException(String, String, int).Тогда есть URISyntaxException(String, String, int) и даже EnumConstantNotPresentException(Class<? extends Enum>, String).

0 голосов
/ 10 октября 2011

Конечно. Если в вашем пользовательском классе исключений есть дополнительные параметры / поля, это облегчит оценку проблемы, если выбрасывается исключение, добавьте.

0 голосов
/ 10 октября 2011

Мне это нравится.Другой вариант - отформатировать строку и использовать обычный конструктор Exception, но я думаю, что у вас все в порядке.

...