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

Java Discussion :

Rendre une variable constante


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Rendre une variable constante
    en fait j'ai une class ou je dois affecter une valeur à une variable (int) et après je veux la rendre constante pour que je puisse accéder à cette variable dans une autre class.

    je sais que si je veux déclarer une constante en java je dois faire static final int A = 28; mais moi je veux attribuer une valeur genre (tab.size()), comment je peux faire ça et Merci !

  2. #2
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Bonjour,
    je n'ai peut être pas bien compris la question, mais dans ce cas il suffit de créer un getter dans cette classe (public bien sûr) afin qu'il soit accessible de l'extérieur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int getTabSize() {
        return tab.size();
    }
    Et ensuite tu l'appelles d'où tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int variable = maClasse.getTabSize();

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Autrement dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class maClass{
    static final int  var = tab.size(); 
    }
    c'est possible ?

    et aprés dans la class autrClass je vais faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maClass c = new maClass() ;
    System.out.println(c.var);
    ca va marcher vous pensez ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ce n'est pas ce qu'a dit @VirgApps.

    D'abord, une variable static est une variable qui est partagée entre toutes les instances de la classe (au sens que la valeur est unique pour l'ensemble des instances de la classe) : donc ça n'a pas de sens de l'initialiser avec la valeur d'une variable d'instance, qui sera de toute manière créée après (la variable static est créée lors de la première instanciation de la classe, avant même que son constructeur ne soit invoqué, donc avant même que toute variable non static ne soit créée.

    Si tab est une variable static, autant appeler directement MaClasse.tab.size (à moins que tab soit private, auquel cas, un getter static fera l'affaire, simimairement à l'accesseur donné en exemple par @VirgApps). Surtout si tab est mutable : dans ce cas, utiliser un static final pour stocker tab.size(), alors que cette valeur peut varier est une absurdité (à moins d'un cas exceptionnel de mémoriser une taille initiale, éventuellement).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il faut distinguer la notion de constante de variable immutable : c'est-à-dire une variable dont on ne veut pas que sa valeur puisse être modifiée.

    Si tu as besoin de stocker une valeur dans une variable, et que tu ne veux pas qu'elle puisse être modifiée : il suffit de la déclarer final. La notion de static n'a rien à voir avec cet aspect, mais uniquement avec le fait que la valeur est commune à toutes les instances, alors que dans le cas contraire, elle est spécifique à chaque instance.

    Quant à l'aspect accessibilité/visibilité, soit on fait une variable public, et on a aucun contrôle dessus (n'importe quelle autre classe peut y accèder, la modifier, la lire, lui donner n'importe quelle valeur, n'importe quand), soit on fait une variable private et on utiliser un accesseur (getter) et un mutateur (setter) pour pouvoir contrôler la lecture et l'écriture de sa valeur.
    Ainsi, si tu veux avoir une variable qui ne puisse pas être modifiée par n'importe quelle instance d'une autre classe, tu la rends private, et tu ne fais pas de mutateur public pour cette variable. La variable peut-être non final : elle ne pourra être modifiée que pas des méthodes de la classe qui la déclare.

    Quant à la constante, c'est autre chose : 5 est une constante, "truc" en est une autre. On nomme communément une variable static final constante par analogie à d'autres langages, et aussi parce qu'en général (parce que dans le cas contraire, les cas où cela aurait un sens sont rares), ce type de variable est initialisée par une constante.

    Rendre une variable constante n'a, alors, pas vraiment de sens. Et en tout cas, ça n'a rien à voir avec l'accès externe d'une variable interne, sous entendu d'instance.

    Enfin, il faut faire attention avec le fait de stocker le résultat d'une méthode dans une variable : lorsque le retour de la méthode est une valeur "stable", ça peut avoir un sens, surtout si les ressources utilisées par la méthode sont conséquentes (temps long, mémoire volumineuse...). Si la valeur n'est pas stable (comme la taille d'une liste qui peut changer à tout instant), ça n'a pas de sens, sauf localement à une méthode éventuellement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [rendre une variable globale dasn une fonction]
    Par emilek dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 28/07/2009, 17h00
  2. Cast d'une variable constante
    Par cirdan_elf dans le forum C
    Réponses: 4
    Dernier message: 29/06/2009, 15h32
  3. Rendre une variable public dans mon main
    Par djorfe dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 13/06/2008, 10h49
  4. Réponses: 2
    Dernier message: 30/09/2007, 14h35
  5. Passer une variable constante à un Fragment_program
    Par vieurou dans le forum OpenGL
    Réponses: 0
    Dernier message: 21/08/2007, 15h08

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