Как наследовать класс RuntimeException? - PullRequest
3 голосов
/ 16 ноября 2010

У меня есть два варианта:

public class SyntaxException extends RuntimeException {
  private String msg;
  public SyntaxException(String m) {
    this.msg = m;
  }
  public String getMessage() {
    return "Invalid syntax: " + this.msg;
  }
}

и

public class SyntaxException extends RuntimeException {
  public SyntaxException(String m) {
    super("Invalid syntax: " + m);
  }
}

Какой из них предпочтителен, если мне нужно подумать о возможности сопровождения и расширяемости кода?

Ответы [ 4 ]

6 голосов
/ 16 ноября 2010

Используйте второй. Аргументом для конструктора RuntimeException и вашего унаследованного класса является сообщение об ошибке, поэтому нет смысла дублировать ту функциональность, которая уже указана RuntimeException в вашем коде.

2 голосов
/ 16 ноября 2010

Я иду с номером 2. Номер один выглядит как изобретать колесо.

Кроме того, думая о YAGNI и KISS , кажется, что метод getMessage() и атрибут msg не принесут никакого дополнительного значения вашему классу. Более того, если кто-то столкнется с этим во время чтения вашего кода, я предполагаю, что он или она скажут или подумают «почему он / она переопределяет эти вещи».

Если в будущем вам понадобится пользовательский метод getMessage(), напишите его.

1 голос
/ 16 ноября 2010

Не первый.

Если «Неверный синтаксис:» является частью вашего сообщения, вы можете использовать это:

public class SyntaxException extends RuntimeException {
  public SyntaxException(String wrongSyntax) {
    super("Invalid syntax: " + wrongSyntax);
  }
}

Но, по крайней мере, это зависит от факта:нужен ли вам i18n или нет.

0 голосов
/ 16 ноября 2010

второй.Поскольку базовый класс уже имеет сообщение, имеет смысл использовать его.

...