Java 记录接口引发的运行时异常
我有以下界面:Java 记录接口引发的运行时异常,java,documentation,javadoc,Java,Documentation,Javadoc,我有以下界面: public interface DataReceiver { public Data getData(); } 具体的接收器有不同的数据源,因此引发不同的异常: public class DeviceDataReceiver implements DataReceiver { // Gets data from some hardware device // Exceptions include: DeviceNotConnected, DeviceN
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标记在相应的类中记录了这些运行时异常
我正在努力解决的是如何记录接口,因为这将是我的库的用户在遇到错误时首先看到的东西(我在整个公共API中使用接口,而不是具体的类)。记录派生类的所有异常对我来说不是很有吸引力,因为它们根本没有关系
这种情况下有什么最佳实践吗
我正在努力解决的是如何记录接口,因为它
当我的图书馆的用户得到一个
错误(我在整个公共API中使用接口,而不是
混凝土类)。记录衍生产品的所有例外情况
课程对我来说不是很有吸引力,因为它们没有
没有关系
如果您想记录这些异常,我认为您认为它们是客户端处理的例外。如果是这样,为什么不使用选中的异常呢
我知道有两种思考方式,但问自己这个问题很有趣
如果您认为这些异常不是原始的检查和处理(或抛出),我也不认为您需要在接口中引用这些异常。此外,理论上,接口不应该在其规范中与实现耦合。
但是,您可以在接口方法中指定,根据实现,它可能抛出
RuntimeException
子类。
此外,如果您掌握了这些异常的代码源,也许您可以为祖先异常使用一个抽象类,并将您的子类继承到此抽象类。通过这种方式,您可以在接口中记录这个超级异常 最后,您的设计鼓励您的客户在使用DataReceiver子类时不要按接口编程,因为否则客户会冒没有特定javadoc的风险,并且他们不会直接看到可能抛出使用的实现方法的特定异常。
所以,也许你也应该在界面上精确 我可以写一本关于Java中检查异常和未检查异常的思考过程的书,但基本上可以归结为:我不喜欢用throws声明捕获子类并将其弄乱。你回答的最后一部分是非常正确的,你认为我应该返回我的DataReceiver的具体类并仅仅希望。客户机在代码中使用接口将其程序与具体的DataReceiver分离?“这归结为:我不喜欢用抛出声明捕获子类并使其混乱。”我同意。如果具体类有太多的特殊性,我宁愿将它们声明为声明的类型,而不是接口;当我使用
TreeMap
时,我更喜欢声明TreeMap TreeMap=new TreeMap()
而不是Map Map=new TreeMap()
,因为我想知道TreeMap的特殊性。那么客户机处理FileNotFound
是否应该与处理DeviceNotLicensed
异常不同呢?毕竟,如果您有一个通用接口,未来的实现可能会抛出不同类型的异常,客户端通常无法知道它使用的是哪种类型的实现…FileNotFoundException
是一个选中的异常,因此FileDataReceiver
当前需要包装并重新播放它(以及任何其他选中的异常)作为一个RuntimeException
,对吗?@MickMnemonic Yes,它可以实现atm。也许然后您可以创建自己的异常类型,扩展RuntimeException
,并在接口文档中声明要抛出的异常类型。然后,实现将使用它包装异常,您可以在客户机代码中捕获此异常,而不是RuntimeException
。听起来根异常对客户端来说并不重要(除了日志记录),因为这些情况通常是不可恢复的。@MickMemonic我将这样做,并重新考虑我的设计文档,以解决davidxxx在回答的最后一部分中提出的问题。非常感谢。