java exceptions保留封装示例

时间:2011-05-30 15:49:40

标签: java encapsulation runtimeexception

我有一个管理磁盘上文件的类,以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);
    }
}
  1. 您是否同意此解决方案,在简单性和正确性之间进行良好的权衡?
  2. 我很幸运,因为我发现了一个合适的例外。如果我不是,我必须定义我自己的异常,因为使用Exception类并不是很好的设计。 (使调用者捕获异常,隐式捕获RuntimeException)。 在运行异常在RuntimeException类中具有共同祖先的异常结构中是不是异常,而所有已检查的异常都没有?

1 个答案:

答案 0 :(得分:2)

1)我同意你并倾向于这样做:手动保留大量异常类型在大多数情况下是无用的。您在应用程序的更高级别所需的全部精度足以为用户提供有意义的错误。在您的情况下“无法读取文件”,因此IOException正常。

2)是的,它是Java中Exception机制的一个长期记录的缺陷...有些人甚至会说Java中的Exceptions机制在其根目录是有缺陷的(大多数时候检查的异常都被滥用)。无论如何,在你的情况下,我有时会使用catch-it-all InvalidStateException或IllegalArgumentException。当然,如果您需要更精确的意义传达到应用程序的上层,您总是可以创建自己的例外。但请记住:亲吻:)