2010-11-16 2 views
3

У меня есть два варианта:Как наследовать класс RuntimeException?

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); 
    } 
} 

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

ответ

6

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

2

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

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

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

0

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

1

Не первый.

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

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

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