[J2SE] intérêt du final dans : fonction( final int arg) ?
Bonjour,
J'ai trouvé du code java (sur Junit) avec ce type de déclaration de méthode que je ne connaissais pas en utilisant final:
public void runTest ( final Test test, final RestResult result) { ...}
J'ai tout d'abord pensé que :
1/ cette déclaration permet d'imposer que l'argument utilisé par la méthode ait été déclaré comme final avant
2/ OU avec cette déclaration on ne peut pas changer l'argument passé dans le corps de la méthode
3/ OU la variable passée en argument devient final à partir de là ( ok c'est douteux, mais c'est pour mes cas de test)
Après quelques tests vérificatifs je ne vois aucune de ces 3 suppositions vérifiées.
Alors quid de cette déclaration ?
Non, cela n'empeche pas la modification
Mon problème est bien là : je pensai également que cette déclaration devait empêcher de modifier le param. Mais en faisant un test je m'appercois qu'il n'en est rien.
Sur ma méthode de test suivante :
ce que je teste : Class monObjet ; attribut name (avec set/get)
la méthode de test :
doIt ( final mon Objet arg ) { monObjet.setName("toto") }
Il n'y a aucun frein a la modif de l'attribut monObjet.name !
Donc on peux bien modifier l'objet passé en paramètre (j'ai aussi vérifié plus après dans mon code que la modif avait été effective).
Alors où va t'on ?
EDIT :
OK, alors ta précision dans ton edit confirme effectivement ce que je vois. Ok, merci
Re: [J2SE] intérêt du final dans : fonction( final int arg)
Citation:
Envoyé par guile.rondins
Bonjour,
J'ai trouvé du code java (sur Junit) avec ce type de déclaration de méthode que je ne connaissais pas en utilisant final:
public void runTest ( final Test test, final RestResult result) { ...}
J'ai tout d'abord pensé que :
1/ cette déclaration permet d'imposer que l'argument utilisé par la méthode ait été déclaré comme final avant
2/ OU avec cette déclaration on ne peut pas changer l'argument passé dans le corps de la méthode
3/ OU la variable passée en argument devient final à partir de là ( ok c'est douteux, mais c'est pour mes cas de test)
Après quelques tests vérificatifs je ne vois aucune de ces 3 suppositions vérifiées.
Alors quid de cette déclaration ?
ben la reponse est la suivante:
Si tu declares une inner classe a l interieur de cette methode, alors les methodes de l innerClass pouront utiliser:
- Les variables d instance de la outer class
- Les methodes de la outer class
- Les variables final de la methode dans laquelle la inner class est declaree
voila ++