记录抛出的接口RuntimeExceptions

时间:2016-10-27 18:43:56

标签: java documentation javadoc

我有以下界面:

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中使用界面而不是具体的类) 。记录派生类的所有异常对我来说听起来并不吸引人,因为它们完全没有任何关系。

此方案的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

  

我正在努力的是如何记录界面,因为它   将是我的图书馆用户看到的第一件事,当他得到一个   错误(我在整个公共API中使用界面而不是   具体课程)。记录派生的所有异常   课程对我来说听起来并不吸引人,因为他们没有   关系。

如果您想记录这些异常,我认为您认为它们是处理客户端的例外。如果是这种情况,为什么不使用已检查的例外?
我知道有两种方法可以考虑这个问题,但问自己这个问题很有意思。

如果您认为这些例外不是原始的检查和处理(或抛出),我也不认为您需要在界面中引用它们。此外,理论上,接口不应与其规范中的实现耦合。  
但是,您可以在接口方法中指定根据实现的内容,它可能会抛出RuntimeException个子类。
此外,如果你掌握了这些异常的代码源,也许你可以使用一个抽象类来表示祖先异常,并将你的子类继承到这个抽象类。通过这种方式,您可以在界面中记录这个超级异常。

最后,您的设计鼓励您的客户在使用DataReceiver子类时不按接口编程,因为否则客户端冒险不具有特定的javadoc,并且他们不会直接看到可能抛出使用的实现方法的特定异常。登记/> 所以,也许你应该在界面中精确它。