2011-05-30 2 views
1

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); 
    } 
} 
  1. -vous d'accord avec cette solution, est un bon compromis entre la simplicité et la justesse?
  2. 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?

Répondre

2

1) Je suis d'accord avec vous et j'ai tendance à faire de même: garder manuellement beaucoup de types d'exception est inutile la plupart du temps. Tout ce dont vous avez besoin aux niveaux supérieurs de l'application est une précision suffisante pour pouvoir fournir une erreur significative à l'utilisateur. Dans votre cas "Impossible de lire le fichier", l'exception IOException est OK.

2) Oui, il existe une faille documentée du mécanisme Exception dans Java ... Certains diront même que le mécanisme Exceptions de Java est défectueux à sa racine (les exceptions vérifiées sont souvent utilisées à mauvais escient). Quoi qu'il en soit dans mon cas, j'utilise parfois l'exception InvalidStateException ou IllegalArgumentException. Bien sûr, vous pouvez toujours créer vos propres exceptions si vous avez besoin d'une signification plus précise à transmettre aux couches supérieures de votre application. Mais rappelez-vous: KISS :)