我正在尝试实现我的第一个自定义RuntimeException

public class MyException extends RuntimeException {
    private static final long serialVersionUID = 1L;

    private boolean isFizz;
    private boolean isBuzz;
    private Widget widget;

    public class MyException(boolean isFizz, boolean isBuzz, Widget widget) {
        super();

        setIsFizz(isFizz);
        setIsBuzz(isBuzz);
        setWidget(widget);
    }

    // Getters and setters for all 3 properties...

    @Override
    public String toString() {
        System.out.println("MyException is now in string form.");
    }
}


当我去测试一下:

MyException exc = new MyException(false, true, new Widget());

System.out.println(exc.toString());
System.out.println(exc.getMessage());


我得到:

MyException is now in string form.
null


因此getMessage()不起作用。我希望toString()getMessage()都产生相同的字符串,并且我认为Throwable#getMessage()只是返回了toString()

所以我问:重写getMessage()的“正常”方法是什么?我真的必须像toString()那样重写它吗,像这样:

@Override
public String getMessage() {
    return toString();
}


或者,还有更好的方法?提前致谢。

最佳答案

我以为Throwable#getMessage()只是返回了toString()


您绕错了方向。 getMessage()返回传递给超类构造函数的任何消息:

 public MyException(boolean isFizz, boolean isBuzz, Widget widget) {
    super("This is the message");


toString()的默认实现返回异常类名称,后跟消息。

关于java - 使Java异常子类的getMessage()工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14791393/

10-09 07:28