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

AWT/Swing Java Discussion :

Transformer variable en final sans changer le nom


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité1
    Invité(e)
    Par défaut Transformer variable en final sans changer le nom
    bonjour bonjour,

    le problème est assez simple, j'ai disons un string a que je veux transformer en final string a sans passer par b.

    pas de:
    String b = 12;
    blabla
    final String a = b;

    j'aimerais si possible un truc du genre
    String a = 12;
    final String a = (final) a

    c'est possible?!

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ca ne sert juste à rien, et je ne vois pas dans quel concept tu aurais besoin d'un truc qui rendrait le code illisible et incompréhensible !?
    Heureusement que c'est impossible !

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Si, il existe un contexte dans lequel ce genre de choses aurait pu être utile : lors de l'utilisation de ces variables dans une classe (anonyme ou non) décrite dans le même bloc de code. Ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public doMachin(final int a) {
      final int b = [...] ;
      .......................
      int c = a + b;
      button.addActionListener(new ActionListener {
         public void actionPerformed(ActionEvent event) {
           System.out.println(a);
           System.out.println(b);
           // Et la ca coince bien  sur !
           System.out.println(c);
         }
      });
    }
    On est donc oblige de declarer et utiliser une autre variable final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public doMachin(final int a) {
      final int b = [...] ;
      .......................
      int c = a + b;
      final int fc = c;
      button.addActionListener(new ActionListener {
         public void actionPerformed(ActionEvent event) {
           System.out.println(a);
           System.out.println(b);
           System.out.println(fc);
         }
      });
    }
    Note : l'exemple et les modifications apportees sur c sont bien sur ici volontairement simplistes.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Je ne disais pas que ça ne sert à rien de mettre une variable en final, je dis que ça sert à rien de conserver le même nom d'autant plus que ça nuirait à la lisibilité et la bonne compréhension du code.
    Ce serait la porte ouverte à n'importe quoi.

    Et dans ton exemple bouye, on pourrait directement faire final int c = a + b;.

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Note : l'exemple et les modifications apportees sur c sont bien sur ici volontairement simplistes.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Par défaut
    Même dans ce genre de situation on devrait s'en passer d'un tel "cast". Le langage fait que dans cette situation le fait que la variable ou classe soit final c'est qu'il y a une raison : (http://www.developpez.net/forums/sho...d.php?t=416569) raison très discutable quand on sait qu'un membre de classe peut y accéder directement ou que de prendre sa référence et de déclarer une nouvelle variable en final permet de squizzer le truc... pour moi la seule vraie raison au final c'est la lisibilité. Donc remplacer ça par un truc pas très lisible je trouve ça moyen

    sachant que tu gardes la même référence donc pas de recopie d'objet, je ne vois vraiment pas le mal à faire un truc comme tu as dit plus faut:

    a= ...
    final b = a;

    je trouve ça mieux que de faire un a = (final) a;

    c'est un peu comme si dans un code tu avais ça
    long a = ....
    a = (int) a;
    a ceci pres que ça ça compile. Si tu changes le sens de ta variable en cours de chemin, faut en utiliser une autre.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Aucun intérêt. Une variable final permet au compilateur de savoir qu'il n'a pas besoin d'une adresse pour stocker la référence. Il peut librement copier la référence partout où il veut, il sait que la référence ne changera pas. Ca fait partie de la déclaration du comportement de la variable. Le changer en cours de route n'aurait aucun sens. Ce serait comme vouloir transformer un long en int en cours de route....

Discussions similaires

  1. Enregistrer une feuille sans changer le nom du classeur ouvert
    Par nounours1952 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/06/2014, 09h09
  2. changer l'emplacement des redo sans changer leur noms
    Par glood1 dans le forum Installation
    Réponses: 2
    Dernier message: 05/05/2010, 19h50
  3. Réponses: 6
    Dernier message: 18/11/2008, 18h31
  4. changer le nom d'une variable
    Par chet dans le forum Général Python
    Réponses: 1
    Dernier message: 11/08/2006, 11h12
  5. Réponses: 14
    Dernier message: 01/03/2006, 08h32

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