我应该生成异常消息(在我的示例中来自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);
}
}
答案 0 :(得分:3)
我会像下面这样写。如果我要努力创建一个Exception,我会把它作为一个检查过的Exception。
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);
}
}
答案 1 :(得分:1)
由于您选择了RuntimeException
,这意味着您不打算在本地处理它(靠近它被抛出的位置),但是在堆栈中的某个更高级别处理它会处理许多不同的例外。
在这种情况下,不会涉及异常特定的逻辑;您将在日志文件中写入错误条目并进行清理。因此,简单的message
属性比单独的String属性+复杂的getMessage
实现更适合该法案。
答案 2 :(得分:0)
您应该接受message
参数并调用超级构造函数。
答案 3 :(得分:0)
IMO如果异常是 API 的一部分,那么您应该在构造函数中获取message参数并将其传递给super。
这样做的主要优点是您可以更改来自不同模块的消息格式,如果您保留固定格式,那么所有格式都将保持不变。