包含多个异常的自定义异常:是否鼓励?
Custom Exception that wraps Multiple Exceptions : Encouraged or Not?
我正在编写一个 Java 库,用于访问数据库。
我将异常抛给使用 JAR 库以 he/she 想要的方式处理它的最终程序员。
我编写了一个自定义异常(在下面提供)来将特定于连接的异常包装在一起,这样最终程序员就不必在他的代码中捕获所有这些异常。 (为了方便他)
在编写 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();
}
}
}
您可以将原因 (Throwable) 传递给自定义异常。查看 Exception javadoc 了解更多信息。
编辑:
public class CustomException extends Exception {
public CustomException(Throwable t) {
super(t);
}
}
public void testMethod(String s) throws CustomException {
try {
int integer = Integer.parseInt(s);
} catch (NumberFormatException e) {
throw new CustomException(e);
}
}
try {
testMethod("not a number");
} catch (CustomException ce) {
ce.printStackTrace(); // this will print that a CustomException
// with the cause NumberFormatException has occured.
ce.getCause(); // this will return the cause that
// we set in the catch clause in the method testMethod
}
根据 this
post,将所有异常包装在一个中并不好。
如果你想包装它们,那么
由于您的程序一次只会抛出一个异常,因此无需在 NConnectionException
.
中存储异常列表
并且您可以在 NConnectionException class 中创建单个异常对象。您可以参考this
结构。
并将抛出的异常存储在该对象中并返回 NConnectionException
class 新创建的对象。让调用程序捕获 NConnectionException 异常并取出存储的对象并相应地执行。
注意 : 通常我们不处理未经检查的异常(如NullPointerException),调用程序会处理它。
我正在编写一个 Java 库,用于访问数据库。 我将异常抛给使用 JAR 库以 he/she 想要的方式处理它的最终程序员。
我编写了一个自定义异常(在下面提供)来将特定于连接的异常包装在一起,这样最终程序员就不必在他的代码中捕获所有这些异常。 (为了方便他)
在编写 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();
}
}
}
您可以将原因 (Throwable) 传递给自定义异常。查看 Exception javadoc 了解更多信息。
编辑:
public class CustomException extends Exception {
public CustomException(Throwable t) {
super(t);
}
}
public void testMethod(String s) throws CustomException {
try {
int integer = Integer.parseInt(s);
} catch (NumberFormatException e) {
throw new CustomException(e);
}
}
try {
testMethod("not a number");
} catch (CustomException ce) {
ce.printStackTrace(); // this will print that a CustomException
// with the cause NumberFormatException has occured.
ce.getCause(); // this will return the cause that
// we set in the catch clause in the method testMethod
}
根据 this
post,将所有异常包装在一个中并不好。
如果你想包装它们,那么
由于您的程序一次只会抛出一个异常,因此无需在 NConnectionException
.
并且您可以在 NConnectionException class 中创建单个异常对象。您可以参考this
结构。
并将抛出的异常存储在该对象中并返回 NConnectionException
class 新创建的对象。让调用程序捕获 NConnectionException 异常并取出存储的对象并相应地执行。
注意 : 通常我们不处理未经检查的异常(如NullPointerException),调用程序会处理它。