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 :

Generic : méthodes


Sujet :

Langage Java

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut Generic : méthodes
    Salut,
    Je commence tout juste à essayer de faire mes propres classes génériques, ou plutôt méthodes en l'occurence. Donc peut être que je ne prends tout simplement pas la bonne approche.

    J'ai définis les interfaces suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface Persist
    {
    	public Object getKey();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface PersistWithIntegerKey extends Persist
    {
    	public Integer getKey();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface PersistWithStringKey
    {
    	public String getKey();
    }
    Et dans une classe de type "fabrique" j'ai créé les méthodes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public <Ts extends PersistWithStringKey> Ts getObjet(Class<Ts> c, String stringId) throws SQLException
    {
    	return (Ts)sqlMap.queryForObject("get"+c.getSimpleName(),stringId);
    }
     
    public <Ti extends PersistWithIntegerKey> Ti getObjet(Class<Ti> c, Integer intId) throws SQLException
    {
        	return (Ti)sqlMap.queryForObject("get"+c.getSimpleName(),intId);
    }
    Or l'appel suivant ne semble pas valide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataModelManager.getInstance().getObject(RefMetier.class,refMetierId)
    Alors que RefMetier implémente bien l'interface PersistWithIntegerKey :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class RefMetier implements PersistWithIntegerKey
    J'ai sans doute du louper un truc, donc si vous avez une idée .

  2. #2
    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,


    Quel est l'erreur exact ? Au passage j'espère que c'est une erreur de copie mais tu as getObjet et getObject...


    Sinon au lieu de multiplier les interfaces, pourquoi ne pas utiliser directement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface Persist<T>
    {
    	public T getKey();
    }
    a++

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Arg, l'erreur de débutant... eclipse m'orientait vers autre chose, bref, c'était une belle erreur de syntaxe.
    Et tu as également completement raison pour les interfaces : refactorting en cours!

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Hum, si je peux continuer la conversation :
    Si je passe par des interfaces génériques comment va se traduire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public <Ti extends PersistWithIntegerKey> Ti getObjet(Class<Ti> c, Integer intId) throws SQLException
    ?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Bon ok :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public <Ti extends Persist<Integer>> Ti getObject(Class<Ti> c, Integer intId)

  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
    Et selon la signature de ta méthode queryForObject() (si tId est de type Object), tu pourrais même utiliser une seule et unique méthode getObjet() en utilisant deux types Générics :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public <T, P extends Persist<T>> P getObjet(Class<P> c, T tId) throws SQLException
    {
        	return (Ti)sqlMap.queryForObject("get"+c.getSimpleName(),tId);
    }
    Avec T qui correspond au type de base (Integer ou String dans tes exemples), et P correspondant du type Persist correspondant

    a++

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    En effet, c'est bien mieux, merci .

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

Discussions similaires

  1. Generics : méthodes identiques
    Par michelp3 dans le forum Langage
    Réponses: 1
    Dernier message: 22/12/2012, 14h17
  2. Problème avec generic et appel de méthode
    Par NiamorH dans le forum C#
    Réponses: 10
    Dernier message: 31/10/2008, 19h52
  3. Implementation méthode avec generics
    Par hhhelea dans le forum Langage
    Réponses: 1
    Dernier message: 12/06/2008, 14h47
  4. [jse5/generics] Méthodes génériques
    Par palnap dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2008, 12h14
  5. [Generics] Diriger vers la bonne méthode
    Par anthyme dans le forum C#
    Réponses: 12
    Dernier message: 01/10/2007, 19h21

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