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 :

Retour d'objet générique / paramétré


Sujet :

Langage Java

  1. #1
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Points : 580
    Points
    580
    Par défaut Retour d'objet générique / paramétré
    Bonjour,
    Je ne sais pas si le titre est bon, cependant je vais vous expliquer mon problème.

    J'essaye de faire une fonction pouvant me renvoyer n'importe quel type d'objet, ca parait dangereux mais ca ne l'est pas.

    Pour exemple j'aimerais faire un peu comme la biblio JPA, c'est à dire lorsque je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    User u = Entity.find(User.class,1);
    Dans cet exemple, pas besoin de caster mon retour donc pas besoin de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    User u = (User) Entity.find(User.class,1);
    Voici donc mon problème, comment faire de meme, je ne veux pas caster mes objet en retour.
    A priori, la signature de la fonction find est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public abstrac <T> T find(class<T> arg1,Object arg2)
    Je pense que cela se fait avec les <T> T , mais je ne vois pas comment.
    Est ce quelqu'un aurait une idée, ou un tuto la dessus ?

    Merci d'avance.
    " Je préfère comprendre les gens qui ne me comprennent pas "

  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,


    C'est exactement cela.
    Le <T> devant la définition de la méthode indique qu'il s'agit d'une méthode paramétré. Ainsi on peut utiliser T comme un type dans les paramètres de la méthode ou comme valeur de retour.

    Le plus "dur" consiste à coder proprement le code de la méthode, mais là cela dépend de ce qu'elle fait...

    Quel est le code de cette méthode sans paramétrage ?


    a++

  3. #3
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Points : 580
    Points
    580
    Par défaut
    bah justement, mon exemple sur JPA n'était pas innocent, car c'est ce que je fais.

    Donc le corps ne vas probablement pas t'apprendre grand chose car il y a pas mal d'objet et de méthode qui parte de là.

    Grosso modo cela fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public Object find(Class<?> c,Object pk)
        {        
                Object o = null;           
                JSqlPersistenceInterface sqlInterface = new JSqlPersistenceInterface(c, pk);            
                o = sqlInterface.getEntity();
     
                return o;
        }
    et le getEntity renvois un type Object

    Qu'est ce que tu entend par
    Le plus "dur" consiste à coder proprement le code de la méthode, mais là cela dépend de ce qu'elle fait...
    Aurais tu un exemple simple ?
    " Je préfère comprendre les gens qui ne me comprennent pas "

  4. #4
    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
    En fait c'est la classe JSqlPersistenceInterface qui devrait être paramétré et faire le travail "proprement".


    Si tu as la main sur cette classe ce serait la meilleur solution !



    Si tu n'as pas la main dessus, tu peux forcer la chose avec un cast vers T, ce qui génère un warning à la compilation (que l'on peut ignorer avec @SuppressWarnings).
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public <T> T find(Class<T> c, Object pk) {
    		JSqlPersistenceInterface sqlInterface = new JSqlPersistenceInterface(c,pk);
    		@SuppressWarnings("unchecked") // on ignore le warning du cast ci-dessous :
    		T object = (T)sqlInterface.getEntity();
    		return object;
    	}
    a++

  5. #5
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Points : 580
    Points
    580
    Par défaut
    Ok je venais juste d'essayé la solution que tu proposait et cà marchait, mais je vais le faire proprement, et donc directement dans la classe JSqlPersistenceInterface.

    Je laisse un peu le post ouvert pour le compléter au cas ou ca interesse quelqu'un.

    En tout cas merci pour tes réponses.
    " Je préfère comprendre les gens qui ne me comprennent pas "

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

Discussions similaires

  1. Passage d'un objet générique en paramètre
    Par lodacom dans le forum C++
    Réponses: 14
    Dernier message: 29/05/2013, 15h14
  2. Javascript et retour d'objet
    Par roudoudouduo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/04/2006, 15h47
  3. [DLL] Passage d'objet en paramètre
    Par TitiFr dans le forum Langage
    Réponses: 4
    Dernier message: 20/08/2005, 23h18
  4. retour d'objet par référence...
    Par sas dans le forum C++
    Réponses: 15
    Dernier message: 28/05/2005, 17h54
  5. taille d'objet générique
    Par Heimdall dans le forum C
    Réponses: 7
    Dernier message: 01/07/2004, 18h00

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