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 :

static method should be accessed in a static way


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Par défaut static method should be accessed in a static way
    Bonjour,

    je dispose de methodes static sur des classes que j'ai regroupé dans une superClass de maniere statique.

    Certes c'est pas tres objet, mais pour le coup, cela m'arrange.

    J'ai le warning
    static method should be accessed in a static way quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SuperClass.ConteneurMethode1.Traitement();
    La correction proposée est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomPackage.ConteneurMethode1.Traitement();
    Or, j'ai envie de conserver la superClass visible pour profiter de l'intellisence et aussi pour garder la cohérence avec laquelle j'ai commencer de coder.

    Y a t-il quelque chose à faire pour palier à ce warning ?

    Merci

  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
    Je vois pas le rapport entre ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SuperClass.ConteneurMethode1.Traitement();
    et ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NomPackage.ConteneurMethode1.Traitement();
    Soit tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom.de.package.NomDeClasse.methode()
    Soit tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    import nom.de.package.NomDeClasse;
    .....
    NomDeClasse.methode()
    Il viens d'ou ce "SuperClass". tu peux nous donner le code concret (tes imports, ta déclaration de class, ta déclaration de méthode et ton appel) qu'on y voie plus clair? Une classe statique doit toujours etre accédée via un nom de classe, jamais via une instance.

  3. #3
    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 b_lob Voir le message
    Or, j'ai envie de conserver la superClass visible pour profiter de l'intellisence et aussi pour garder la cohérence avec laquelle j'ai commencer de coder.
    L'intellisense ne disparaîtra pas.

    Il n'y a pas de cohérence dans le fait d'appeler une méthode statique en passant par un nom de variable. Seulement un nom de classe. C'est également générateur de bugs, bien que cela soit peu probable dans la situation actuelle telle que tu la décris.

    Y a t-il quelque chose à faire pour palier à ce warning ?
    Oui, mais les seules raisons de le faire sont mauvaises.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Par défaut
    Merci pour vos réponses.. Cela m'embete de ne pouvoir écrire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Logger.logBadValue.LogInvalidInt("toto");
     
    Logger.logBadData.LogInvalidPeriod(Periode)
    Le logger est statique et les champs sont statiques aussi... Et je vois pas pourquoi ca devrait contrarier le compilateur mais bon..

    Si vous avez d'autres pistes..

  5. #5
    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
    Le compialteur, a raison te dit que LogInvalidInt est une méthode "statique" de la classe instanciée par logBadValue et que, donc, tu dois accéder à cette méthode via le nom de classe et non via une instance. Je ne sais pas de quelle classe est logBadValue, mais si sa classe est Machin, alors ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Logger.logBadValue.LogInvalidInt("toto");
    est strictement le même que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Machin.LogInvalidInt("toto");

  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
    Ben, pas exactement, et c'est bien là le problème.

    La classe réelle de l'objet logBadValue n'est pas vérifiée. Dans le cas de méthodes statiques, c'est le type déclaré de cette variable, qui est utilisé. Raison pour laquelle c'est une très mauvaise idée de l'écrire comme ça.

    Le compilateur n'est pas plus contrarié que ça, il dit juste "Oooh, toi t'es en train de faire une connerie !" Heureusement qu'il est là pour le dire. (Note : il dit pas "je crois que tu es en train de..." il dit "tu es en train de...")
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2011
    Messages : 65
    Par défaut
    Enfin reste qu'avoir du static pour un logger je suis pas sûr d'en saisir l'intérêt personnellement... Tu es sûr que ce soit vraiment nécessaire dans ton cas? Si ça ne l'est pas je pense que tu vas chercher loin pour pas grand chose u_u

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

Discussions similaires

  1. warning "static method should be accessed in static way"
    Par bmayer dans le forum Général Java
    Réponses: 5
    Dernier message: 02/04/2015, 16h31
  2. 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
  3. [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
  4. non-static method cannot be referenced from a static context
    Par Spawny123 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 04/03/2010, 21h38
  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