我有以下界面:
public interface DataReceiver {
public Data getData();
}
具体的接收器具有不同的数据来源,因此会抛出不同的例外:
public class DeviceDataReceiver implements DataReceiver {
// Gets data from some hardware device
// Exceptions include: DeviceNotConnected, DeviceNotLicensed, RequestTimeout, etc
public Data getData() { ... }
}
public class FileDataReceiver implements DataReceiver {
// Gets data from a file on disc
// Exceptions include: FileNotFound, BadFormat
public Data getData() { ... }
}
我使用@throws
Javadoc标记在相应的类中记录了这些RuntimeExceptions。
我正在努力的是如何记录界面,因为它是我的库的用户看到的第一件事,当他收到错误时(我在整个公共API中使用界面而不是具体的类) 。记录派生类的所有异常对我来说听起来并不吸引人,因为它们完全没有任何关系。
此方案的最佳做法是什么?
答案 0 :(得分:1)
我正在努力的是如何记录界面,因为它 将是我的图书馆用户看到的第一件事,当他得到一个 错误(我在整个公共API中使用界面而不是 具体课程)。记录派生的所有异常 课程对我来说听起来并不吸引人,因为他们没有 关系。
如果您想记录这些异常,我认为您认为它们是处理客户端的例外。如果是这种情况,为什么不使用已检查的例外?
我知道有两种方法可以考虑这个问题,但问自己这个问题很有意思。
如果您认为这些例外不是原始的检查和处理(或抛出),我也不认为您需要在界面中引用它们。此外,理论上,接口不应与其规范中的实现耦合。
但是,您可以在接口方法中指定根据实现的内容,它可能会抛出RuntimeException
个子类。
此外,如果你掌握了这些异常的代码源,也许你可以使用一个抽象类来表示祖先异常,并将你的子类继承到这个抽象类。通过这种方式,您可以在界面中记录这个超级异常。
最后,您的设计鼓励您的客户在使用DataReceiver子类时不按接口编程,因为否则客户端冒险不具有特定的javadoc,并且他们不会直接看到可能抛出使用的实现方法的特定异常。登记/> 所以,也许你应该在界面中精确它。