[JAVA]: Lever une exception d'un constructeur?

: Lever une exception d'un constructeur? [JAVA] - Programmation

Marsh Posté le 04-02-2002 à 22:28:55    

C'est que j'ai une classe qui ne doit s'instancier qu'à certaines conditions, suivant les arguments envoyés à sa construction. Donc je me disais qu'il serait plus naturel de déléguer à son constructeur ce genre de vérification.
 
Exemple typique:

Code :
  1. A a = null;
  2. try
  3. {
  4.   a = new A(<arguments> );
  5. }
  6. catch(MyException e)
  7. {
  8.   <gestion de l'exception>
  9. }


 
Dans le constructeur:
- évaluation des arguments
- s'ils sont valides, ça passe
- sinon

Code :
  1. throw new MyException();


 
Qu'en pensez-vous? Vaut-il mieux effectuer la vérification avant d'appeler le constructeur?

 

[edtdd]--Message édité par Krueger--[/edtdd]


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 04-02-2002 à 22:28:55   

Reply

Marsh Posté le 04-02-2002 à 23:28:23    

non, je trouve pas ca incorrect ...
remarque : Si cette classe n'est pas amenée à être utilisée par les couches hautes (que c'est une classe utilitaire de ton projet), tu peux lancer une Error (ou une classe en héritant) plutot qu'une exception. Ca évite d'alourdir son utilisation en obligeant les try/catch.
 
Par contre, c'est dangereux : il ne faut pas abuser de ce genre de pratique.
 
Garde bien à l'esprit qu'une exception doit être exceptionnelle ! ;)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-02-2002 à 23:41:35    

Ta solution est bonne, puisque tu fais le contrôle dans le constructeur ce qui évite de faire des tests à chaque fois et en plus ça évite au développeur qui ne connaît pas bien ta classe de se planter sur les contrôles.  
 
Je te donne un petit constructeur que tu dois bien connaître:
 
public File(String pathname) {
 if (pathname == null) {
     throw new NullPointerException();
 }
 this.path = fs.normalize(pathname);
 this.prefixLength = fs.prefixLength(this.path);
 }

Reply

Marsh Posté le 05-02-2002 à 00:17:03    

Heu non, je n'ai jamais fait de constructeur de ce genre. :D Mais bon,je vois bien l'idée.
En tous cas merci pour vos précieux conseils. :hello:


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 05-02-2002 à 09:33:02    

Benou : je vois pas en quoi une exception devrait être exceptionnelle : c'est un mécanisme de gestion d'erreur très pratique, pourquoi pas s'en servir?? Après, évidement, ça dépent de plusieurs choses, mais si par exemple, tu codes un truc qui interragit beaucoup avec l'utilisateur et d'autres systèmes (réseau, database, etc), tu auras énormément d'exceptions, au moins dans les parties qui gèrent les interactions....

Reply

Marsh Posté le 05-02-2002 à 12:29:30    

gfive a écrit a écrit :

Benou : je vois pas en quoi une exception devrait être exceptionnelle : c'est un mécanisme de gestion d'erreur très pratique, pourquoi pas s'en servir?? Après, évidement, ça dépent de plusieurs choses, mais si par exemple, tu codes un truc qui interragit beaucoup avec l'utilisateur et d'autres systèmes (réseau, database, etc), tu auras énormément d'exceptions, au moins dans les parties qui gèrent les interactions....  




 
ce que voulait dire benou c'est que tu devais designer tes classes et leurs interactions de manière à ce qu'elles levent le moins possible d'exceptions c'est tout.


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 05-02-2002 à 13:24:49    

gfive a écrit a écrit :

Benou : je vois pas en quoi une exception devrait être exceptionnelle : c'est un mécanisme de gestion d'erreur très pratique, pourquoi pas s'en servir??



 
voila. c'est un mécanisme de gestion d'erreur. Les exceptions ne doivent pas être déclenchés si le programme se déroule de façon normal. Seulement dans des cas d'erreurs qui ont été prévus.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed