5

创建异常类时可以只提供“特定”构造函数:

public CircularLinkException(final String msg, final String link)
{
    super(msg);
    link = inputName;
}

或者我应该实现以下构造函数Exception

public class CircularLinkException extends Exception
{
    public CircularLinkException() { /* ... */ }
    public CircularLinkException(final String msg) { /* ... */ }
    public CircularLinkException(final Throwable t) { /* ... */ }
    public CircularLinkException(final String msg, final Throwable t) { /* ... */ }
}
4

6 回答 6

10

您应该创建将使用的所有构造函数。

当您想象某物的用途时,不要添加代码。当您有需求时添加它。

http://c2.com/xp/YouArentGonnaNeedIt.html

于 2013-01-14T10:19:14.643 回答
1

实际上不需要实现任何特定的构造函数。可以实现任意一种,以便完全构造异常。

通常会发生两种情况:

  • 您的代码在检查某些内容后意识到出了问题。它想引发异常。对于这种情况,需要一个接受字符串消息的构造函数。通常最好在出错的消息中进行解释。
  • 您的代码尝试做某事并捕获由于未声明而无法进一步抛出的异常。然后,您仍然可以在消息中解释错误,将一些重要的上下文数据放在那里,但提供捕获的异常以进行诊断也很重要。对于这种情况,您需要一个接受 String 和 Throwable 的构造函数。

我认为,不带参数的版本和仅采用 Throwable 的版本更适合懒惰的人,您只需通过不实现这些来强制执行代码中的更多顺序。

如果您的特定异常受益于一些始终可用的附加信息,那么构造函数肯定应该具有附加参数,从而强制传递此信息。在您的情况下,应保留具有两个字符串参数的版本,但可能也将 Throwable 作为第三个参数的版本会很好。许多已知的异常(例如 IOException)经历了从“我们永远不需要这种构造函数”到在以后的版本中添加这样的构造函数的痛苦。

于 2013-01-14T10:22:59.820 回答
0

您只能声明specific构造函数。

于 2013-01-14T10:18:43.720 回答
0

据我了解,您希望自己例外

public class CircularLinkException extends Exception

所以你可以有任意数量的构造函数,CircularLinkException但它们中的每一个都应该调用super(smthg),它是从这里开始的四分之一

于 2013-01-14T10:20:13.097 回答
0

没有必要在您的类中拥有所有构造函数。根据您的需要创建构造函数,但请记住,Java 中的 Exception 类没有默认构造函数,因此请始终从子类的第一行调用父类构造函数,同时生成自己的异常(自定义异常)。

于 2013-01-14T11:14:36.157 回答
0

可以提供特定的构造函数,并且可以在需要时添加更多构造函数。就我个人而言,我不会使用超类的所有构造函数。

但这一切都取决于如何使用新的异常类“CircularLinkException”。如果这个异常类是某个异常库的一部分,将被其他用户使用,那么提供“来自异常类的构造函数”+“新构造函数”可能是一个好主意。这样,用户可以根据自己的需要在构造函数之间进行选择。

如果您是这个异常类的唯一用户,那么最好分析哪些构造函数对您的代码有用并只编写它们。如果您认为某些构造函数将来会派上用场,您可以随时编写它们 :)。

于 2013-01-14T11:41:33.987 回答