1

我应该生成异常消息(在我的示例中来自link参数)还是我的构造函数应该接受message参数?

class ReadFromNotConnectedInputException extends RuntimeException {

    private String link;

    public ReadFromNotConnectedInputException(final String link)
    {
        this.link = link;
    }

    public String getLink()
    {
        return link
    }

    public String getMessage()
    {
        return String.format("Cannot read from link \"%\", link not connected.", link);
    }
}
4

4 回答 4

3

我会像下面这样写。但是,如果我努力创建一个异常,我会将其设为已检查异常。

class ReadFromNotConnectedInputException extends RuntimeException {
    private final String link;

    public ReadFromNotConnectedInputException(final String link) {
        super("Cannot read from link \"" + link + "\", link not connected.");
        this.link = link;
    }

    public String getLink() {
        return link
    }
}

或者

class ReadFailedLinkNotConnectedException extends Exception {
    public ReadFailedLinkNotConnectedException (final String link) {
        super(link);
    }
}
于 2013-01-14T13:39:53.890 回答
1

由于您选择了 a RuntimeException,这意味着您不打算在本地处理它(靠近它被抛出的位置),而是在堆栈中的某个更高级别处理许多不同的异常。

在这种情况下,将不涉及特定于异常的逻辑;您将在日志文件中写入一个错误条目并进行清理。因此,一个简单的message属性比单独的 String 属性 + 一个复杂的getMessage实现更符合要求。

于 2013-01-14T13:38:24.787 回答
0

您应该接受message参数并调用超级构造函数。

于 2013-01-14T13:35:01.817 回答
0

IMO 如果异常是API的一部分,那么您应该在构造函数中获取消息参数并将其传递给超级。

这样做的主要优点是您可以更改来自不同模块的消息格式,如果您保持固定格式,那么所有模块都将使用相同的格式。

于 2013-01-14T13:37:24.927 回答