【发布时间】:2016-09-20 16:25:04
【问题描述】:
我正在将 C Api 桥接到 Java Api。 C Api 对异常情况使用错误代码。由于每个函数都返回这样一个错误代码并且有很多错误代码(大约 100 个),我编写了一个错误代码处理程序,将错误代码转换为一堆更一般的运行时异常:
public class ErrorCodeHandler {
public static void handle(int status) {
switch(status) {
case SUCCESS:
return; // In case of success, simply return
case NO_VALID_DATA:
throw new DataError("No valid data");
...
case NO_CONNECTION:
throw new ConnectionError("No connection");
}
}
}
我所有的自定义异常类都继承自特定于我的应用程序的基本异常类:
public class MyException extends RuntimeException { ... }
public class DataException extends MyException { ... }
...
我的方法只是对调用 C API 返回的错误代码调用句柄:
public void someMethod() {
int status = cBinding.someMethod();
ErrorCodeHandler.handle(status);
}
如果发生错误,该方法将抛出相应的异常。如果没有,它会简单地返回。
现在我面临如何记录这种异常处理的问题。我读到您没有将运行时异常添加为 throws 子句,而是使用 Javadoc @throws 标记对其进行记录。
现在我的问题是,我应该为每个我知道可以从方法抛出的不同异常添加一个@throws 标签(间接通过查找可能的错误代码),还是应该只记录一个通用的@throws MyException?我觉得第一种方法会使我的文档变得混乱,其中包含许多大部分无用的 @throws 标签(很多这些错误代码非常罕见),并且记录这些将是一项非常艰巨的工作。第二种方法主要是复制粘贴,但我会失去异常层次结构给我的优势。
有没有人做过类似的事情?有关如何记录此类内容的任何建议?
【问题讨论】:
-
关于如何记录此类内容的任何建议? - 在这里谈论 javadocs
-
是的,我会添加标签!
-
反正我做到了
-
从您的代码看来,每个方法/函数都可以抛出所有异常,是这样吗?通常方法/函数会抛出一部分异常。
-
如果从 C API 返回正确的错误代码,它可以。实际上,这些函数只返回特定的错误代码。