2009-07-24 7 views
1

j'ai une exception personnalisée comme celui-ciJava gestion des exceptions - exception personnalisée

public class MyOwnException extends Exception { 

} 

Puis dans ma classe

J'ai deux méthodes

public void ExceptionTest() throws Exception { 
    throw new FileNotFoundException(); 
} 


public void ApplicationExceptionTest() throws MyOwnException { 
    throw new FileNotFoundException(); 
} 

Eclipse se plaint de la deuxième méthode « Unhandled type d'exception FileNotFoundException '. Je pensais depuis MyOwnException étend Exception il ne devrait pas se plaindre ...

Quelqu'un peut-il me dire ce que je manque ici?

+7

La convention Java pour les noms de méthode est qu'ils doivent commencer par une lettre minuscule; par exemple. exceptionTest plutôt que ExceptionTest. –

Répondre

3

Votre méthode déclare qu'il jette MyOwnException, mais FileNotFoundExceptionn'est pas un MyOwnException. Tout simplement parce que les deux sous-classes Exception finalement ne signifie pas qu'ils sont liés à l'un l'autre.

Vous ne pouvez lancer une exception vérifiée que si cette classe d'exception ou une superclasse est explicitement répertoriée dans la clause throws. MyOwnException n'est pas une super-classe de FileNotFoundException.

Pourquoi voulez-vous faire cela?

9

arbre d'extension

  • Exception
    • IOException
      • FileNotFoundException
    • MyOwnException

FileNotFound et MyOwn ne se connaissaient pas.

public void ApplicationExceptionTest() throws Exception 
{ 
throw new FileNotFoundException(); 
} 

est la voie à suivre

Commentaire:

J'espère que cela pour les tests de mockup et non pour la mise en œuvre d'une classe que vous Wnt à utiliser dans votre code source régulière!

+2

+1 pour afficher la hiérarchie des classes. @thomas_ds Vous avez mentionné que vous avez Eclipse, vous pouvez donc voir cet arbre en cliquant avec le bouton droit sur MyOwnException et en sélectionnant "Open Type Hierarchy" ou F4. Dans ce cas, Exception et IOException ont beaucoup d'autres sous-classes. – MatrixFrog

2

Vous dites que ApplicationExceptionTest lève MyOwnException. Alors que MyOwnException étend Exception, cela n'est pas pertinent ici car FileNotFoundException ne prolonge pas MyOwnException. Si cela vous facilite la tâche, essayez de remplacer Exception par "Shape", FileNotFoundException par "Square" et MyOwnException par "Circle". Donc vous dites que vous lancez un cercle mais que vous lancez un carré. Peu importe que les deux soient des formes. En outre, votre convention de nommage est très atypique pour Java.En Java, les méthodes commencent généralement par une lettre minuscule.

1

Les exceptions vérifiées dans Java sont généralement une mauvaise idée, car trop souvent cela conduit à des «spaghetti d'exception». La plupart des frameworks modernes n'utilisent pas d'exception vérifiée - en fait, la plupart d'entre eux enveloppent les anciennes exceptions vérifiées avec des exceptions non cochées.

Questions connexes