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 :

Problème fonction générique


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut Problème fonction générique
    Bonjour à tous,

    J'ai besoin de votre aide.

    J'ai créé une fonction qui permet de vérifier plusieurs fichiers xml. Cette fonction je veux l'appeller dans différentes classes. Cependant suivant la classe dans laquelle je l'appelle je veux que la fonction vérifie seulement certains fichiers xml, pas tous.

    J'ai pensais à faire une classe abstraite que je développerais dans les différentes classes en question. Mais n'y a t il pas un moyen de faire cette fonction en générique ? Ainsi quand j'appelle la fonction dans le main principal de ma classe, seulement certains xml sont vérifiés. Cependant je ne sais pas trop comment faire.

    Je ne sais pas si j'ai été assez clair donc n'hésitez pas à me demander plus d'infos.

    Merci beaucoup pour votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Bonjour,

    Pourquoi ne pas simplement passer en paramètres les fichiers que tu souhaites vérifier?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    Car ils varient.

    Suivant la classe où je me trouve je peux par exemple vouloir vérifier 3 documents xml. Mais dans une autre classe je peux vouloir en vérifier 1 seul.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    Bonjour,

    je ne vois pas le problème, il suffit de passer une liste de fichier en paramètres puis de la parcourir et a chaque fichier faire le traitement.

    Exemple

    signature de la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void fonction(List<String> fichiers){
     
    }
    différents appels :

    1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<String> li = new ArrayList<String>();
    li.add("ex1.xml");
    li.add("ex2.xml");
    fonction(li);

    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<String> li = new ArrayList<String>();
    li.add("ex1.xml");
    li.add("ex2.xml");
    li.add("ex3.xml");
    li.add("ex4.xml");
    fonction(li);
    3-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<String> li = new ArrayList<String>();
    li.add("ex1.xml");
    fonction(li);
    MigouW

    La seule bataille perdue d'avance est celle que l'on refuse de livrer.


    Pensez au tag
    Ma réponse vous a été utile, votez plus 1 sur le message.
    Ma réponse est hors sujet, votez moins 1 sur le message.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    Ta réponse est trés bien

    Mais je voulais savoir si il n'y avait pas plus simple pour ne pas a chaque appel devoir configurer une liste.

    Par exemple avoir une fonction de ce type :

    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
    public void fonction<T>(){
     
           if (<T> == "Ariane") {
     
                   File f = new file("...");
                   File f1 = new file("...");
                   verifA1(f);
                   verifA2(f1);
          }
     
          if (<T> == "Losange"){
     
                 File f = new file("...");
                 verifL1(f);
          }
     
         etc
     
    }
    Et ainsi par exemple lor d'un appel :
    Je ne sais pas si c'est faisable

    Merci de ton aide en tout cas

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Ceci n'a rient à voir avec les Generics...
    Les Generics permettent de spécifier le type de certains objets de la méthode. Ce n'est pas un paramètre !



    Soit tu utilises un paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void fonction(int type) { // avec une enum à la place du int ce serait mieux
    	switch (type) {
    	case 1:
    		verifA1(new file("..."));
    		verifA2(new file("..."));
    		break;
    	case 2:
    		verifL1(new file("..."));
    		break;
    	}
    }



    Soit tu écris deux méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void fonction1() {
    	verifA1(new file("..."));
    	verifA2(new file("..."));
    }
     
    public void fonction2() {
    	verifL1(new file("..."));
    }


    a++

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    Merci de ton aide. Ta première solution est très bonne. Merci encore

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 19
    Points : 25
    Points
    25
    Par défaut
    Sinon, en paramètre de ta fonction, tu peux passer une valeur hexadécimale (ou un entier), ensuite, dans une série de if, tu fais un test & sur chacun des bits et suivant les bits à 1, tu passes dans tel ou tel fichier.
    Ça permet avec une seule valeur de traiter comme tu le souhaites les xml à sans avoir à ajouter une configuration à chaque nouveau cas, et ça te garde quelques bits supplémentaires pour ajouter d'autre fichiers xml plus tard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function(int i){
    if(i & 0x01)
    {VerifXml1()}
    if(i & 0x02)
    {VerifXml2()}
    if(i & 0x04)
    {VerifXml3()}
    ...}
    Après, c'est sur que tu dois connaitre les fichiers que tu appelles en fonction de la combinaison de valeurs, exemple: i=6 appellera VerifXml2() et VerifXml3(), mais la souplesse d'utilisation est totale.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Points : 426
    Points
    426
    Par défaut
    Plutôt que de partir dans une solution à base de if, pourquoi ne pas utiliser le polymorphisme ? Quel est le problème à ce niveau évoqué dans votre premier post ?

    Vous pouvez mettre la méthode d'analyse dans une classe commune et étendre cette classe pour traiter vos différents cas. Plutôt que de retoucher une méthode avec un gros if lors de l'ajout d'un nouveau cas, il suffira de créer une nouvelle classe fille contenant les nouveaux fichiers à analyser.

    La solution de FreeSample me fait assez frémir .

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    Merci de votre aide à tous.

    Je n'ai pas trop compris comment tu veux faire Drawingrom. Je suis assez mauvais en java

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    Up

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je vois pas bien pourquoi il voulait absolument partir sur le polymorphisme.

    Le pattern stratégie a son utilité, mais ce que tu essaies de faire me semble être plus simple que ça, par nature.
    La solution d'adiGuba, ou bien avoir prédéfini quelque part des listes de fichier, une seule fois chacune, et les passer en paramètre de ta méthode, me semblent une réponse adaptée au problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    Ok merci de ton aide

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

Discussions similaires

  1. Problème : Fonctions et commande Execute
    Par bubi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2005, 11h01
  2. Problème fonction SDL
    Par seeme dans le forum SDL
    Réponses: 2
    Dernier message: 06/11/2005, 20h22
  3. Problème fonction PL/SQL
    Par SSJ17Vegeta dans le forum PL/SQL
    Réponses: 2
    Dernier message: 29/10/2005, 21h14
  4. Problème fonction et trigger sous 7.2
    Par anoukhan dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/06/2005, 22h53
  5. Réponses: 2
    Dernier message: 20/08/2004, 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