【发布时间】:2015-06-14 19:03:31
【问题描述】:
我正在编写一个用于访问数据库的 Java 库。 我将异常抛给使用 JAR 库以他/她想要的方式处理它的最终程序员。
我编写了一个自定义异常(如下所示)来将特定于连接的异常包装在一起,这样最终程序员就不必在他的代码中捕获所有这些异常。 (方便他)
在编写 Java 库时,这是一个好习惯吗? 通过使用它,用户只需在他的代码中捕获 NConnectionException。
public class NConnectionException extends Exception {
private static final Logger logger = LoggerFactory.getLogger(NConnectionException.class);
public NConnectionException(Exception e) {
if (e instanceof NullPointerException) {
logger.error("ERROR IN READING DF");
e.printStackTrace();
}
else if (e instanceof FileNotFoundException) {
logger.error("FILE NOT FOUND");
e.printStackTrace();
} else if (e instanceof ParserConfigurationException)
{
logger.error("PARSE CONF ERR");
e.printStackTrace();
}
else if (e instanceof org.xml.sax.SAXException)
{
logger.error("SAX ERR");
e.printStackTrace();
}
else if (e instanceof IOException)
{
logger.error("IO ERR");
e.printStackTrace();
}
}
}
【问题讨论】:
-
在您的情况下,您没有在自定义异常中存储任何堆栈跟踪或错误消息。使用
e.printStackTrace();是一种不好的做法。 -
您可以将多个异常存储在
NConnectionException内的列表中,并让您的调用程序决定它需要从异常中获取哪些数据。我建议不要处理运行时异常,即未经检查的异常。 -
通过这样做我必须遍历异常列表并找到抛出的异常?还是我没有正确理解你所说的?非常感谢您的帮助!
-
我没有打印堆栈跟踪,而是抛出了异常对象。这是鼓励吗?
-
是的,调用程序需要遍历它。你的程序是否抛出多个异常
at a time?因为这只会发生在多线程环境中。
标签: java jar exception-handling checked-exceptions