J'ai une classe qui gère un fichier sur disque, en sauvegardant un fichier sous forme de xml. Puisqu'il utilise JAXB (mais pourrait utiliser n'importe quelle autre bibliothèque xml, ce n'est pas pertinent), il pourrait générer des exceptions vérifiées jaxb (ou anyother xml library).
Afin de préserver l'encapsulation, je devrais "convertir" mon exception de bibliothèque d'origine en quelque chose au niveau logique de ma bibliothèque. Mais je ne veux pas augmenter le nombre de classes avec des classes peu pertinentes. Puisque la classe est liée au fichier, je pense que IOException est adéquat pour le cas.java exceptions conserve l'exemple d'encapsulation
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);
}
}
- -vous d'accord avec cette solution, est un bon compromis entre la simplicité et la justesse?
- J'ai été chanceux, parce que j'ai trouvé une exception appropriée. Si je ne l'étais pas, je définirais nécessairement ma propre exception, car l'utilisation de la classe Exception n'est pas bonne. (Force l'appelant à attraper Exception, en attrapant implicitement aussi RuntimeException). N'est-ce pas une anomalie dans la structure des exceptions que les exceptions d'exécution ont un ancêtre commun dans la classe RuntimeException, alors que toutes les exceptions vérifiées ne l'ont pas?