Java异常保留封装示例

| 我有一个管理磁盘上文件的类,以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);
    }
}
您是否同意此解决方案,请在简单性和正确性之间进行权衡? 我很幸运,因为我找到了一个合适的例外。如果不是,则必须定义自己的异常,因为使用Exception类并不是很好的设计。 (导致调用方捕获Exception,也隐式捕获RuntimeException)。 运行时异常在RuntimeException类中具有一个共同的祖先,而所有检查的异常都没有,这是异常结构中的异常吗?     
已邀请:
        1)我同意你的观点,并且倾向于这样做:大多数情况下,手动保留许多异常类型是没有用的。在应用程序的更高级别上,您所需要的就是足够的精度,以能够向用户提供有意义的错误。在您的情况下,“无法读取文件”,因此IOException是可以的。 2)是的,这是Java中的Exception机制的一个长期存在的缺陷……甚至有人说Java中的Exceptions机制在其根源上是有缺陷的(大多数时候滥用已检查的异常)。无论如何,我有时都使用包罗万象的InvalidStateException或IllegalArgumentException。当然,如果您需要将更精确的含义传达给应用程序的上层,则始终可以创建自己的异常。但是请记住:吻:)     

要回复问题请先登录注册