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

Langage Java Discussion :

Generics et méthodes statiques


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut Generics et méthodes statiques
    Bonjour,

    je suis tombé sur un petit problème de design aujourd'hui, j'en ai donc fait un petit exemple très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Generale
    {
        public static void test()
        {
            System.out.println("test 1");
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Ajout extends Generale
    {
        public static <T extends Generale> void petitTest()
        {
            T.test();
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Besoin1 extends Ajout
    {
        public static void test()
        {
            System.out.println("Besoin 1");
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Besoin2 extends Ajout
    {
        public static void test()
        {
            System.out.println("Besoin 2");
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Main
    {
        public static void main(String[] args)
        {
            Besoin1.petitTest();
            Besoin2.petitTest();
        }
    }
    Résultat :

    run:
    test 1
    test 1

    Je pense bien comprendre que çà vienne du fait que je travail sur des méthodes statiques.

    Mais j'ai 3 questions : pourquoi çà fait pas ce que je veux (à savoir : afficher les messages de Besoin1 et 2) ? pourquoi çà génère pas d'erreur de compilation ? comment contourner le problème (sachant que je ne peut pas du tout toucher au code de la classe Generale) ?


    Merci d'avance.

  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
    les méthodes statiques ne sont pas héritée. donc dans petitTest, a la compilation, on évalue déjà que tu veux appeler la méthode statique sur Generale.

  3. #3
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    Ok, donc je reformule mon problème :

    je doit ajouter la méthode 'petitTest' à toutes mes classes BesoinX (dans mon vrai programme j'en ai 8 mais çà peut venir à augmenter).

    petitTest est bien sûr plus compliqué que çà, mais j'ai pas envie de dupliquer plusieurs le code dans chaque classes, et petitTest doit appeler la méthode test de chaque classes BesoinX.


    Comment je fait ? on m'a conseillé de réécrire petitTest comme çà :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    petitTest(Class<T> clazz) .....

    Mais je fait quoi avec clazz ? es-ce que c'est valable ?

  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
    test() ne dois pas etre statique.

    edit: et accessoirement tu n'a absolument pas besoin de generic dans le cas présent, c'est juste un problème d'héritage.

  5. #5
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    Je ne peut pas toucher du tout a la classe Generale, et donc je ne peut pas modifier la signature de la méthode test().

    Je ne vois pas comment éviter la duplication de code

  6. #6
    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
    heu tu peux modifier le pere mais pas les enfants, et donc tu veux modifer le pere our qu'il fasse un traitement dependant des enfant, ca sent la grosse bourde de design

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

Discussions similaires

  1. méthodes statiques java équivalence c++
    Par loacast dans le forum C++
    Réponses: 3
    Dernier message: 09/12/2006, 18h57
  2. Dynamic link et Méthode statique
    Par Higestromm dans le forum C++
    Réponses: 2
    Dernier message: 19/05/2006, 22h07
  3. Pthreads, méthode statique ?
    Par tibouchou dans le forum C++
    Réponses: 4
    Dernier message: 15/03/2006, 21h51
  4. [C#] interface, méthodes statiques ?
    Par gmonta dans le forum C#
    Réponses: 6
    Dernier message: 02/12/2005, 10h27
  5. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10

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