2013-01-14 62 views
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); 
    } 
} 
+1

'inputName'没有定义。 – Archer

回答

1

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

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

0

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

0

IMO如果异常是API的一部分,那么您应该在构造函数中将message参数传递给super。

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

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

阅读http://www.oracle.com/technetwork/articles/entarch/effective-exceptions-092345.html之后,我选择了一个未经检查的异常。你是否建议不要创建我自己的未经检查的异常? –

+0

尽管源代码是C++,但我决定根据需要对消息进行格式化,因为4.在http://www.boost.org/community/error_handling.html –

+1

您或者希望捕获您的特定异常,在这种情况下应该是一个特定于被捕获时会发生什么的检查异常,或者您不希望它被捕获,在这种情况下,它最终会在某个日志中出现,并且您使用的类无关紧要。即您可以重复使用现有的一个。 –