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

avec Java Discussion :

static ou pas static ?


Sujet :

avec Java

  1. #1
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut static ou pas static ?
    Bonjour à tous,
    Pour le jeu que je développe actuellement, je suis confronté à un choix et j'aimerais avoir vos avis.

    J'ai plusieurs double (constant) représentant des vitesses. Je les utilises dans 2 classes.
    J'aimerais savoir si ça fait "propre" de créer un classe "Constante" et des mettre ces vitesses en public static final?
    Pour ensuite les appeler comme ça : Constante.vAir
    Ou alors les mettre dans une des 2 classes qui les utilises et faire des accesseurs?

    J'ai le même dilemme avec des enum (pas constant pour le coup).
    Merci

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    S'il s'agit de valeur constante (qui ne devrait jamais être modifié), alors tu peux utiliser les public static final.

    Si ces valeurs peuvent être modifier il est préférable de passer par un accesseur.

    a++

  3. #3
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Merci adiGuba, j'ai juste modifié mon post concernant les enum qui ne sont pas constant (enfin je ne croit pas )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enum ETAT { EAU, GLACE, TREMPLIN, TERRE, AIREAU, AIRGLACE, AIRTREMPLIN, AIRTERRE };

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Toutefois en général on n'aime pas trop créer des nouvelles classes juste pour leur mettre une liste de constantes.

    L'usage est plutôt de définir ces constantes dans une classe ou une interface qui a déjà un rapport avec elles.

    Edit : Je comprends pas trop la question avec les enums. Un enum c'est plus qu'une simple liste de constantes, c'est un type de données qui ne peut avoir que les valeurs qui y sont définies, ou null.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Edit : Je comprends pas trop la question avec les enums. Un enum c'est plus qu'une simple liste de constantes, c'est un type de données qui ne peut avoir que les valeurs qui y sont définies, ou null.
    C'est la première fois que j'utilise des enum alors j'ai un peu de mal à comprendre "vraiment" ce que s'est.

    Ma classe joueur à une instance de l'enum Etat. Actuellement enum Etat est définie dans ma classe joueur.
    J'utilise un accesseur pour récupérer l'état du joueur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Joueur implements IDrawable{
     
        public enum ETAT { EAU, GLACE, TREMPLIN, TERRE, AIREAU, AIRGLACE, AIRTREMPLIN, AIRTERRE };
     
        private ETAT etat;
     
        public ETAT getEtat(){return etat;}
        public void setEtat( ETAT etat ) { this.etat = etat; }
    Je me demandais si je pouvais mettre enum Etat dans la classe Constante? en static ou static final?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Ma classe joueur à une instance de l'enum Etat.
    Bien. On préférera dire qu'elle a une variable du type enum Etat. Parce que, si un type enum a 7 valeurs possibles par exemple, chacune de ces valeur est l'une des 7 uniques instance du type enum en question, pour toute la JVM.

    Actuellement enum Etat est définie dans ma classe joueur.
    Bien. Tu peux aussi le mettre directement dans un fichier Etat.java

    J'utilise un accesseur pour récupérer l'état du joueur.
    Bien.

    Je me demandais si je pouvais mettre enum Etat dans la classe Constante? en static ou static final?
    Comme je l'ai dit, cette classe Constante n'est pas censée exister, donc non. Mais le langage ne l'interdit pas.

    Pour info, un enum est toujours static final, que tu le dises ou non.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    OK très bien, merci pour toutes ces informations.

    Choix final : mettre les constantes dans IDrawable ou modifier IDrawable en ADrawable (classe abstraite) et mettre les constantes dedans.

    Et pour l'enum, ce qui m'embêtais en le mettant dans la classe Joueur c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(j.getEtat() == Joueur.ETAT.GLACE){...}//j = instance de Joueur
    C'est le "Joueur" qui me dérange... je trouve que ça fais tache.
    Après c'est peu être mon esprit perverti qui tourne plus très rond

    Tu peux aussi le mettre directement dans un fichier Etat.java
    Je vais me pencher sur LA CHOSE. Voir si ça me plait esthétiquement parlant

    Merci

  8. #8
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Toutefois en général on n'aime pas trop créer des nouvelles classes juste pour leur mettre une liste de constantes.
    Personnellement je ne trouve pas cela si dérangeant que cela...


    @Ivelios : juste une remarque, les enums sont des classes et doivent respecter les mêmes conventions de nommages. ETAT devrait se nommer Etat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public enum Etat { EAU, GLACE, TREMPLIN, TERRE, AIREAU, AIRGLACE, AIRTREMPLIN, AIRTERRE };
    a++

  9. #9
    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 : 45
    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
    Citation Envoyé par thelvin Voir le message
    Toutefois en général on n'aime pas trop créer des nouvelles classes juste pour leur mettre une liste de constantes.

    L'usage est plutôt de définir ces constantes dans une classe ou une interface qui a déjà un rapport avec elles.
    Je me permet un bémol quand même. en général, un bon endroit c'est aussi dans une interface dont héritent une grande partie de ceux qui en ont besoin (cf l'api SWING qui fait régulièrement usage de cette technique)

  10. #10
    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 : 45
    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
    Citation Envoyé par Ivelios Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(j.getEtat() == Joueur.ETAT.GLACE){...}//j = instance de Joueur
    C'est le "Joueur" qui me dérange... je trouve que ça fais tache.
    Après c'est peu être mon esprit perverti qui tourne plus très rond
    deuxd possibiltiés

    1) faire de etat une classe à part entiètre, et non pas une inner class de Joueur.
    2) faire dans le code un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import static my.package.Joueur.*;
    histoire de rameuter toutes les constantes dans l'espace de nommage local

  11. #11
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Je me permet un bémol quand même. en général, un bon endroit c'est aussi dans une interface dont héritent une grande partie de ceux qui en ont besoin (cf l'api SWING qui fait régulièrement usage de cette technique)
    Perso je n'aime pas trop cette technique. Au final ca devient assez brouillon et on n'arrive pas à déterminer l'origine exacte de la constante

    Je préfère qu'une constante soit identifié de manière précise et unique

    a++

  12. #12
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import static my.package.Joueur.*;
    histoire de rameuter toutes les constantes dans l'espace de nommage local
    J'avoue, sur ce coup j'ai pas été fut-fut. J'ai même pas pensé à ça, c'est pourtant si simple

  13. #13
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Je me permet un bémol quand même. en général, un bon endroit c'est aussi dans une interface dont héritent une grande partie de ceux qui en ont besoin (cf l'api SWING qui fait régulièrement usage de cette technique)
    Perso je n'aime pas trop cette technique. Au final ca devient assez brouillon et on n'arrive pas à déterminer l'origine exacte de la constante

    Je préfère qu'une constante soit identifié de manière précise et unique
    2 solutions possibles donc .
    Je vais voir la quel me parait la plus "cool"

    pour info : je n'ai que 7 constantes en tout. Uniquement des doubles représentant des vitesses.
    Donc pas la peine que je fasse un "gros gros truc".

  14. #14
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Perso je n'aime pas trop cette technique.
    Chacun ses goûts, pas d'objection de ce côté.

    Au final ca devient assez brouillon et on n'arrive pas à déterminer l'origine exacte de la constante
    Hum. Ah bon ?

    Je préfère qu'une constante soit identifié de manière précise et unique
    Il faudrait vraiment faire de gros efforts d'obscurantisme pour parvenir à mettre en œuvre des constantes qui ne soient pas identifiées de manière précise et unique.

    À peu près tout ce que je suis capable d'imaginer spontanément répond à ces critères.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    @thelvin : le problème c'est que la même constante peut être accéder de manière différente.

    Par exemple pour SwingConstants.CENTER, on peut utiliser JLabel.CENTER, JTextField.CENTER, JButton.CENTER, JTabbedPane.Button, ...

    Bon après c'est sûr ce n'est pas la mort non plus

    a++

  16. #16
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    D'un autre côté, l'interface représentant un "contrat", sa vocation n'est pas particulièrement d'avoir des valeurs.
    Personnellement, je préfère une classe indépendante contenant des constantes (ou propriétés static) à usage commun et la définition des constantes (ou propriétés static) à usage "local" dans la classe qu'elles qualifient.
    Mais rien n'interdit de faire autrement...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. self:: $this-> ou $this:: static / pas static
    Par boubil dans le forum Langage
    Réponses: 4
    Dernier message: 07/08/2012, 16h52
  2. [Debutant]difference entre static et non static
    Par jeremypd dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 07/03/2008, 08h13
  3. Static et non static. Comment faire?
    Par cmako dans le forum Langage
    Réponses: 16
    Dernier message: 19/09/2007, 23h03
  4. enum imbriqués : static ou pas?
    Par ®om dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2006, 19h28
  5. section critique "static" ou pas?
    Par giova_fr dans le forum Windows
    Réponses: 2
    Dernier message: 01/01/2006, 13h15

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