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

NetBeans Java Discussion :

Du non static context au static context


Sujet :

NetBeans Java

  1. #1
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Du non static context au static context
    bonjour,

    J'ai toujours des difficultés avec le contexte static
    J'ai rayé ce mot de mes déclarations
    suite à un précédent post j'ai mis mes constantes dans un classe dédiée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    public class Constantes
        {
            public  final int MAX_LOOPS = 25;
            public  final String OPTION_SECTION_CCHUNKER  = "CCHUNKER";
            public  final String OPTION_KEYNAME_VERB_FRENCH = "VERB_FRENCH";
            public  final String OPTION_KEYNAME_NOUN_FRENCH = "NOUN_FRENCH";
            public  final String OPTION_KEYNAME_PRESTOPPER_FRENCH = "PRESTOPPER_FRENCH";
            public  final String OPTION_KEYNAME_POSTSTOPPER_FRENCH = "POSTSTOPPER_FRENCH";
            public  final String OPTION_KEYNAME_FUNCT_FRENCH= "FUNCT_FRENCH";
            public  final String OPTION_KEYNAME_LEMMA_NON_STOPPER_FRENCH = "LEMMA_NON_STOPPER_FRENCH";
            public  final String OPTION_KEYNAME_VERB_ENGLISH = "VERB_ENGLISH";
            public  final String OPTION_KEYNAME_NOUN_ENGLISH = "NOUN_ENGLISH";
            public  final String OPTION_KEYNAME_PRESTOPPER_ENGLISH = "PRESTOPPER_ENGLISH";
            public  final String OPTION_KEYNAME_POSTSTOPPER_ENGLISH = "POSTSTOPPER_ENGLISH";
            public  final String OPTION_KEYNAME_FUNCT_ENGLISH = "FUNCT_ENGLISH";
            public  final String OPTION_KEYNAME_LEMMA_STOPPER_ENGLISH = "LEMMA_STOPPER_ENGLISH";
            public  final String OPTION_KEYNAME_VERB_SPANISH = "VERB_SPANISH";
            public  final String OPTION_KEYNAME_NOUN_SPANISH = "NOUN_SPANISH";
            public  final String OPTION_KEYNAME_PRESTOPPER_SPANISH = "PRESTOPPER_SPANISH";
            public  final String OPTION_KEYNAME_POSTSTOPPER_SPANISH = "POSTSTOPPER_SPANISH";
            public  final String OPTION_KEYNAME_FUNCT_SPANISH = "FUNCT_SPANISH";
            public  final String OPTION_KEYNAME_LEMMA_NON_STOPPER_SPANISH = "LEMMA_NON_STOPPER_SPANISH";
            public  final String OPTION_KEYNAME_VERB_ITALIAN = "VERB_ITALIAN";
            public  final String OPTION_KEYNAME_NOUN_ITALIAN = "NOUN_ITALIAN";
            public  final String OPTION_KEYNAME_PRESTOPPER_ITALIAN = "PRESTOPPER_ITALIAN";
            public  final String OPTION_KEYNAME_POSTSTOPPER_ITALIAN = "POSTSTOPPER_ITALIAN";
            public  final String OPTION_KEYNAME_FUNCT_ITALIAN = "FUNCT_ITALIAN";
            public  final String OPTION_KEYNAME_LEMMA_NON_STOPPER_ITALIAN = "LEMMA_NON_STOPPER_ITALIAN";
            public  final String OPTION_KEYNAME_VERB_GERMAN = "VERB_GERMAN";
            public  final String OPTION_KEYNAME_NOUN_GERMAN = "NOUN_GERMAN";
            public  final String OPTION_KEYNAME_PRESTOPPER_GERMAN = "PRESTOPPER_GERMAN";
            public  final String OPTION_KEYNAME_POSTSTOPPER_GERMAN = "POSTSTOPPER_GERMAN";
            public  final String OPTION_KEYNAME_FUNCT_GERMAN = "FUNCT_GERMAN";
            public  final String OPTION_KEYNAME_LEMMA_NON_STOPPER_GERMAN = "LEMMA_NON_STOPPER_GERMAN";
        }
    mais là NetBeans n'aime pas et me dit: non-static variable OPTION_SECTION_CCHUNKER cannot be referenced from a static context

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(GetStringList(Constantes.OPTION_SECTION_CCHUNKER,Constantes.OPTION_KEYNAME_VERB_FRENCH, wsListPosVerb ,wsListPosVerb)!= 0){m_bOptionProblem = true;}
    est ce le fait d'appeler la constante au travers du nom de la classe qui pose le pb?

  2. #2
    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
    soit vous mettez static dans vos déclaration, soit il faudra une instance de Constantes pour pouvoir y accéder.

  3. #3
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut il faut bien du static
    bonjour,
    J'ai donc mis les déclarations en static.
    Il faut dans ce cas qu'on adresse les objets constantes référencés au travers du nom de la classe Constantes dans notre cas.
    Mais alors il faut que les méthode qui appellent soient adressées au travers d'une variable locale qui doit être initialisée sur la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(pOption.GetStringList(Constantes.OPTION_SECTION_CCHUNKER,Constantes.OPTION_KEYNAME_VERB_FRENCH, wsListPosVerb ,wsListPosVerb)!= 0){m_bOptionProblem = true;}
    comme la classe est une interface, elle n'accepte pas le new
    comment initialiser pOption?
    doit on requérir un mécanisme de classforname

  4. #4
    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
    Citation Envoyé par JeanNoel53 Voir le message
    Mais alors il faut que les méthode qui appellent soient adressées au travers d'une variable locale qui doit être initialisée sur la classe

    comme la classe est une interface, elle n'accepte pas le new
    comment initialiser pOption?
    doit on requérir un mécanisme de classforname
    Je n'ai rien compris à ce que vous dites et on ignore ce qu'est pOptions!

  5. #5
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Je n'ai rien compris à ce que vous dites et on ignore ce qu'est pOptions!
    +1, mais à force on s'y fait!

    une classe ne peut pas être une interface. Une classe est une classe, une interface est une interface. Si vous voulez initialiser quelque chose, ça sera un objet, appartenant à une classe, implémentant une interface.

    Donc vous suivez les procédures java, et ça fonctionnera tout seul. Une classe, qui implémente votre interface, avec un constructeur qui va bien, et vous instanciez votre objet comme il se doit.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  6. #6
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut la déclaration et le status
    Bonjour,
    J'ai réessayé un new comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Option pOption = new Option();
    et le compilateur me renvoie Linguistic.Option is abstract; cannot be instantiated
    à+

  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
    on ne peux pas instancier un classe abstraite, uniquement les classes concrètes qui en héritent.

  8. #8
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut et comment initialiser une telle donnée
    Je comprend la limitation portée sur les classes abstraites, mais il faut éviter qu'une variable soit à null lors de l'exécution, c'est toujours désagréable.
    Quels mécanismes peut on utiliser pour avoir une telle variable désignant le bon objet

  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 : 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
    instancier un classe concrete qui hérite de votre classe abstraite.

  10. #10
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut J'ai donc essayé ça
    Bonjour,
    Mais ca ne doit pas être bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    package Linguistic;
     
    import Linguistic.MissionDatabaseManager.enPOS;
     
    /**
     *
     * @author JN Martin
     */
    public class cePos extends CPOS
    {
     cePos()
     {
     }
     String GetPOSLabelWithPOS( enPOS POS)
        {
            return( GetPOSLabelWithPOS( POS));
        }
     enPOS GetPOSWithPOSLabel( String Label)
        {
            return( GetPOSWithPOSLabel( Label));
        }
    }
    pour instancier l'interface de base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    package Linguistic;
     
    import Linguistic.MissionDatabaseManager.enPOS;
     
    /**
     *
     * @author JN Martin
     */
    public interface CPOS
    {
     
     
        public String GetPOSLabelWithPOS( enPOS POS);
        public enPOS GetPOSWithPOSLabel( String Label);
    }
    mais le compilateur me dit no interface expected here
    Comment faire pour faire marcher ce petit exemple?
    à+

  11. #11
    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
    public class cePos implements CPOS

  12. #12
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    public class cePos implements CPOS
    Citation Envoyé par plegat Voir le message
    Une classe, qui implémente votre interface
    Y'a des fois, je me demande si ça vaut la peine de faire des phrases avec les mots adéquats...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  13. #13
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut on avance pas a pas
    Bonjour
    Et merci pour vos réponse qui me font avancer; J'ai fait des test depuis. Il semble que ce code soit sensible aux qualificatif public
    mon code aujourd'hui sur ce petit exemple devient:
    d'abord le code de l'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public interface CPOS
    {
        public String GetPOSLabelWithPOS( enPOS POS);
        public enPOS GetPOSWithPOSLabel( String Label);
    }
    et le compilateur me disait: GetPOSWithPOSLabel(java.lang.String) in Linguistic.cePos cannot implement GetPOSWithPOSLabel(java.lang.String) in Linguistic.CPOS; attempting to assign weaker access privileges; was public
    enPOS GetPOSWithPOSLabel( String Label)
    il a suffit de remettre le mot clef public pour que ca marche
    puis celui de l'implémentation le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public class cePos implements CPOS
    {
     cePos()
     {
     }
        @Override
        public String GetPOSLabelWithPOS( enPOS POS)
        {
            return( GetPOSLabelWithPOS( POS));
        }
     
        @Override
        public enPOS GetPOSWithPOSLabel( String Label)
        {
            return( GetPOSWithPOSLabel( Label));
        }
    }
    et donc ca compile. je verrai plus tard pour l'exécution.

  14. #14
    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
    Citation Envoyé par JeanNoel53 Voir le message
    et le compilateur me dit: GetPOSWithPOSLabel(java.lang.String) in Linguistic.cePos cannot implement GetPOSWithPOSLabel(java.lang.String) in Linguistic.CPOS; attempting to assign weaker access privileges; was public
    enPOS GetPOSWithPOSLabel( String Label)
    Les méthodes des interfaces sont toujours publique. Pour l'héritage en java, un méthode ne peut jamais, dans un enfant, avoir une visibilité moindre que dans le parent. L'un dans l'autre, ca vous oblige a avoir toutes les méthode de l'interface implémentée publique.

  15. #15
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut J e serai toujour content d'avoir le même suppot
    sur le post
    les iterateurs et la marche arrière

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

Discussions similaires

  1. [PHP 5.3] Late static binding avec static function et implements
    Par rawsrc dans le forum Langage
    Réponses: 12
    Dernier message: 16/04/2010, 16h53
  2. static or not static, là est la question
    Par rtg57 dans le forum Langage
    Réponses: 5
    Dernier message: 09/04/2010, 14h30
  3. portée variable static java entre 2 contextes
    Par c+cool dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 20/04/2009, 09h57
  4. [Context]Changer le contexte
    Par GLDavid dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 11/07/2007, 15h55
  5. [Context] définir un contexte complexe
    Par GLDavid dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 03/07/2006, 10h53

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