我有一个管理磁盘上文件的类,以xml的形式保存重新传输。
因为它使用JAXB(但可以使用任何其他xml库,它不相关)它可以生成jaxb(或任何其他xml库)检查的异常。
为了保持封装,我应该在我的库的逻辑层“转换”我的原始库异常。但我不想增加很少,相关性很差的课程。
由于该类与文件相关,我认为IOException足以满足这种情况。
public void save(File file) throws IOException {
try{
JAXBContext jc = JAXBContext.newInstance(ArchiveInfo.class);
Marshaller m = jc.createMarshaller();
m.marshal(this, file);
} catch (JAXBException jexc) {
throw new IOException(jexc);
}
}
答案 0 :(得分:2)
1)我同意你并倾向于这样做:手动保留大量异常类型在大多数情况下是无用的。您在应用程序的更高级别所需的全部精度足以为用户提供有意义的错误。在您的情况下“无法读取文件”,因此IOException正常。
2)是的,它是Java中Exception机制的一个长期记录的缺陷...有些人甚至会说Java中的Exceptions机制在其根目录是有缺陷的(大多数时候检查的异常都被滥用)。无论如何,在你的情况下,我有时会使用catch-it-all InvalidStateException或IllegalArgumentException。当然,如果您需要更精确的意义传达到应用程序的上层,您总是可以创建自己的例外。但请记住:亲吻:)