创建异常类时,只提供“特定”构造函数是可以的:
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) { /* ... */ }
}
答案 0 :(得分:10)
答案 1 :(得分:1)
实现任何特定构造函数实际上并不是必需。可以实现一个任意的,以便构造异常。
通常会发生两种情况:
我认为,没有参数的版本和仅使用Throwable的版本对于懒惰的人来说更多,而你只是通过不实现这些来强制执行代码中的更多顺序。
如果您的特定异常受益于一些始终可用的其他信息,那么构造函数肯定应该有其他参数,强制传递此信息。在您的情况下,应该保留具有两个字符串参数的版本,但可能是一个也将Throwable作为第三个参数的版本会很好。许多已知的异常(例如IOException)经历了“我们永远不需要这种构造函数”的痛苦,以便在更高版本中添加这样的构造函数。
答案 2 :(得分:0)
您只能声明specific
构造函数。
答案 3 :(得分:0)
据我所知,你想做出自己的异常
public class CircularLinkException extends Exception
因此您可以为CircularLinkException
拥有任意数量的构造函数,但每个构造函数都应调用super(smthg)
,其中{{1}}中的一个是here
答案 4 :(得分:0)
没有必要在你的班级中拥有所有构造函数。根据您的需要创建构造函数,但请记住,java中的Exception类没有默认构造函数,因此总是从子类的第一行调用父类构造函数,同时进行自己的异常(自定义异常)。
答案 5 :(得分:0)
可以提供特定的构造函数,并且可以在需要时添加更多构造函数。就个人而言,我不会去超级班的所有构造者。
但这一切都取决于将如何使用新的Exception类“CircularLinkException”。如果此异常类是某些异常库的一部分,将由其他用户使用,则可能是,提供“Exception类的构造函数”+“新构造函数”是一个好主意。这样,用户可以根据需要选择构造函数。
如果您是此异常类的唯一用户,那么最好分析哪些构造函数对您的代码有用并仅编写它们。如果您认为某些构造函数在将来会有用,您可以在将来编写它们:)。