IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Utiliser une fonction une seule fois.


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Utiliser une fonction une seule fois.
    Bonjour,

    Je suis débutant en JAVA et donc loin de connaitre toutes les subtilités du langage, de ce fait, je me retrouve avec un léger problème de sécurité:

    je voudrais qu'une ne mes fonctions ne soit utilisable qu'une unique fois.
    Cette fonction permet d'assigner un numéro d'adhérent à une personne, ceci ne pouvant pas être fait dans le constructeur, j'ai créer une fonction permettant de donner le numéro par la suite mais je voudrais qu'il ne soit pas possible de rechanger le numéro. Existe t-il donc un mot clé pour une telle fonction où dois-je passer par la génération d'une exception si une valeur est déjà assignée à mon numéro d'adhérent?

  2. #2
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Bonsoir,

    Si tu es débutant en Java, peut-être devrais tu mettre cette question dans "Débuter"

    Si ton but est de faire une fonction utilisable une unique fois voilà ce que je ferais :

    En espérant que j'ai bien compris, à première vue, je créerai une variable privée var_mafonction initialisée à 0 et dans ma fonction je mettrais un test "var_mafonction est égal à 0".

    Si c'est le cas alors, la fonction fait ce qu'elle a à faire et on incrémente var_mafonction de 1.

    Si ce n'est pas le cas, alors la fonction renvoit le numéro de l'adhérent (qui existe déjà).

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Actuellement c'est à peut près la solution que j'utilise, je cherchais en faite un moyen de rendre ma fonction inaccessible une fois utilisée...

  4. #4
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    Si tu veux vraiment faire en sorte que personne ne puisse y avoir accès, ça risque d'être vraiment lourd. Avec l'astuce de titourock, dis toi que personne ne pourra exécuter deux fois ta fonction, à moins d'utiliser un décompilateur, de reconstruire le code source, de le modifier, et de recompiler...

  5. #5
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Citation Envoyé par VIIICE Voir le message
    Actuellement c'est à peut près la solution que j'utilise, je cherchais en faite un moyen de rendre ma fonction inaccessible une fois utilisée...
    inaccessible pour qui? Si tu déclares ta méthode "private", aucun utilisateur n'y aura accès depuis une autre classe (quelquesoit le moment) et personne ne saura que cette méthode existe.

    Sinon, tu peux déclarer ton attribut "numéro d'adhérent" comme final sans l'initialiser. Puis dans ton constructeur (ou bien au moment où tu as besoin de le calculer), tu calcules ton "numéro d'adhérent" grâce à ta méthode.
    Ainsi, ton attribut ne pourra être modifié par la suite même si on fait appel à la méthode, il y aura tout simplement un message d'erreur...

    Ta fonction ici sera "réutilisable" sans l'être puisque tu ne pourras l'utiliser qu'une unique fois. Je ne sais pas si cela te convient mieux comme approche...

  6. #6
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par titourock Voir le message
    Sinon, tu peux déclarer ton attribut "numéro d'adhérent" comme final sans l'initialiser.
    Euh dites moi si je me trompe, mais on ne peut pas laisser un blanc lorsqu'on initialise un attribut final, un attribut final doit impérativement ête initialiser de plus final signifie bien inéchangeable.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 62
    Points : 162
    Points
    162
    Par défaut
    Un attribut final peut être initialisé dès sa déclaration dans la classe ou alors il doit impérativement être renseigné dans le constructeur.

  8. #8
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Points : 46
    Points
    46
    Par défaut
    Je suis d'accord, mais il n'est pas possible de "déclarer" un attribut final. Il doit nécessairement être initialisé. Mais je peux me tromper.

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par vantom Voir le message
    Je suis d'accord, mais il n'est pas possible de "déclarer" un attribut final. Il doit nécessairement être initialisé.
    Il doit obligatoirement être initialisé une seule fois... mais pas forcément en ligne !

    Il peut très bien être initialisé dans le constructeur...

    a++

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 62
    Points : 162
    Points
    162
    Par défaut
    Oui

    Tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private final String test;
    Dans ce cas, le constructeur devra initialiser test

  11. #11
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Points : 46
    Points
    46
    Par défaut
    Effectivement au temps pour moi ..
    J'ai effectuer mes tests dans une classe abstract
    Il vaudrait mieux que je revois mes bases

  12. #12
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    C'est un moyen simple mais efficace, et surtout dynamique, de pouvoir enregistrer dans une variable une info qu'on veut garder à tout prix
    En relisant les posts, j'ai eu l'impression de dire une grosse bêtise...ouf

Discussions similaires

  1. appliquer une fonction à une fonction
    Par stracoma dans le forum C++
    Réponses: 6
    Dernier message: 20/03/2015, 16h35
  2. [PHP 5.3] je cherche à faire appel à une fonction 1 seul fois
    Par geforce dans le forum Langage
    Réponses: 1
    Dernier message: 23/05/2010, 14h16
  3. Thread -> Utiliser Synchronize() dans une fonction
    Par Futixu dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/01/2007, 13h13
  4. Utilisation multiple d'une fonction
    Par crevygood dans le forum Framework .NET
    Réponses: 5
    Dernier message: 23/11/2006, 20h01
  5. passer en paramettre d'une fonction une fonction
    Par RoM3Ro dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/06/2006, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo