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 :

warning "static method should be accessed in static way"


Sujet :

Java

  1. #1
    Membre confirmé Avatar de bmayer
    Inscrit en
    Décembre 2003
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 153
    Par défaut warning "static method should be accessed in static way"
    Bonjour

    Bizuth en Java, j'ai de mal a comprendre comment corriger ce warning.
    "The static method hasArg() from the type OptionBuilder should be accessed in a static way"
    lors de l'ajout d'un objet option à une collection (lib Apache commons CLI)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		Option propfile = OptionBuilder.withLongOpt("propfile")
    				.withDescription("Fichier properties de ce programme")
    				.withArgName("prop file")
    				.hasArg()
    				.create("p");
    		opts.addOption(propfile);
    Nom : Warning_StaticWay.png
Affichages : 383
Taille : 10,4 Ko

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Hello,

    Ben c'est-à-dire qu'elle est pas toute jeune cette bibliothèque. Dans son temps ça paraissait logique de faire comme ça, mais en réalité ça marche pas comme ça un patron construction.

    Du coup, le warning a raison c'est pas génial comme code, mais on peut pas y faire grand-chose. Je dirais que la meilleure chose à faire est d'ignorer ce warning-là.
    Par exemple en isolant l'usage de OptionBuilder dans une seule méthode, et mettre @SuppressWarnings("static-access") // for OptionBuilder sur cette méthode.

    Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @SuppressWarnings("static-access") // for OptionBuilder
    private Options makeOptions() {
     
      Options opts = new Options(); 
     
      Option propfile = OptionBuilder.withLongOpt("propfile")
        .withDescription("Fichier properties de ce programme")
        .withArgName("prop file")
        .hasArg()
        .create("p");
      opts.addOption(propfile);		
     
      return opts;
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Dans son temps ça paraissait logique de faire comme ça
    Je ne connaissais pas cette librairie mais ca me donnerait presque envie de jeter un oeil. Des methodes static qui retournent une instance (en modifiant des parametres static puisque ca a l'air d'etre comme ca que ca s'utilise pour que la prochaine instance créée conserve les parametres precedents). En son temps, je ne vois pas comment on peut faire une telle usine a gaz qui va creer plein d'objets temporaires inutiles.

    Franchement, quand j'ai lu le message d'origine, j'ai pensé que c'etait une mauvais utilisation. Mais la... Et je ne parle meme pas du "create" à la fin histoire de gaspiller encore un peu plus de mémoire...

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Jsais pas trop bien ce qui leur était passé par la tête à l'époque, mais dans le source actuel, on voit que toutes ces méthodes renvoient en fait un singleton qui contient pas le moindre état.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé Avatar de bmayer
    Inscrit en
    Décembre 2003
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 153
    Par défaut warning "static method should be accessed in static way"
    Je vais donc adopter le méthode qui permet d'ignorer le warning.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		// -p toto.txt --propfile=toto.txt
    		@SuppressWarnings("static-access")
    		Option propfile = OptionBuilder.withLongOpt("propfile")
    				.withDescription("Fichier properties de ce programme")
    				.withArgName("prop file")
    				.hasArg()
    				.create("p");
    		opts.addOption(propfile);
    Question de néophyte, la suppression du warning ne va s'appliquer QUE à la ligne suivant, ou bien à tout ce qui suit ?

    Si cette lib est faisandée, quelle lib utiliser pour traiter facilement la ligne de commande ?

    B

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Citation Envoyé par bmayer Voir le message
    Question de néophyte, la suppression du warning ne va s'appliquer QUE à la ligne suivant, ou bien à tout ce qui suit ?
    Petit conseil d'informaticien : assez souvent il suffit juste d'essayer.

    Enfin pour te répondre : si le @Machin est mis avant la déclaration d'une variable, il ne porte que sur cette variable et l'expression qui l'initialise. Donc ça ne concernera pas les lignes d'après.

    Du coup c'est bien qu'il ait une portée limitée et qu'il ignore pas tous les warnings... Mais c'est chiant de devoir le répéter pour chaque Option créée. D'où ma suggestion d'isoler ça dans une méthode et de la marquer en entier.

    Citation Envoyé par bmayer Voir le message
    Si cette lib est faisandée, quelle lib utiliser pour traiter facilement la ligne de commande ?
    Beh, le truc c'est qu'elle est très bien cette lib.

    Elle se traîne des ptits défauts d'élégance qui viennent de ses premiers jours, mais c'est pas spécialement gênant dans la réalité. Le warning il est là pour te prévenir que tu fais peut-être une connerie, bon, ben là c'est pas toi qui le fait, et si la lib faisait une connerie ça se saurait depuis longtemps.
    Ça se justifie pas vraiment de changer juste pour un ptit warning.

    Surtout que bon, revenons un peu sur Terre, cette lib sert à faire un parseur de ligne de commandes. Bien sûr qu'il y a des tonnes d'erreurs potentielles quand on interprète une ligne de commande, alors c'est pas pour un warning qui, celui-ci, n'est même pas de ta faute...


    Pour ceux qui se sentent l'âme aventureuse, il y a toujours moyen de prendre leur version SNAPSHOT, où OptionBuilder est déprécié et remplacé par le patron correct.
    Mais ça risque d'être compliqué à récupérer pour un débutant.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. The static method should be accessed in a static way
    Par Memeche dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 10/03/2014, 09h18
  2. [Joomla!] Strict Standards: Non-static method JLoader::import() should not be called statically in
    Par ouldfella dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 23/01/2012, 10h04
  3. static method should be accessed in a static way
    Par b_lob dans le forum Général Java
    Réponses: 18
    Dernier message: 04/05/2011, 00h41
  4. [MySQL] Erreur : Non-static method DB::isManip()
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/09/2007, 15h37
  5. Cannot make a static reference to the non-static method
    Par semaj_james dans le forum Langage
    Réponses: 5
    Dernier message: 11/05/2006, 23h10

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