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 :

Problème avec une generic method


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut Problème avec une generic method
    Salut!

    J'essaye de créer une fonction generic basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    static <T> T f(T a,T b){
            return a+b;
        }
    puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer a=new Integer(1);
    Integer b=new Integer(2);
    Integer c=f(a,b);
    et j'ai ce message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The operator + is undefined for the argument type(s) T, T
    N'est-ce pas justement le rôle des generic de déterminer le type à la compilation.
    Qu'ai-je oublié?

    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par seriousme
    Salut!

    J'essaye de créer une fonction generic basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    static <T> T f(T a,T b){
            return a+b;
        }
    puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer a=new Integer(1);
    Integer b=new Integer(2);
    Integer c=f(a,b);
    et j'ai ce message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The operator + is undefined for the argument type(s) T, T
    N'est-ce pas justement le rôle des generic de déterminer le type à la compilation.
    Qu'ai-je oublié?

    Merci de votre aide.
    Bah non, quelque soit le type, de toute façon, même si c'est Integer, tu ne peux pas faire "+"...
    Là ta généricité te permet simplement d'indiquer que le type de a doit être le même que le type de b, mais en aucun cas de faire un "+"

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Alors comment faire pour créer une fonction qui additionne 2 objets d'un type quelquonque, en supposant bien sûr que l'opérateur "+" est défini pour ces objets?
    Déjà comment faire avec des types primitifs:int, float ...?

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Il faut pour cela, que ta classe T étende une classe permettant l'addition via l'opération +

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par wichtounet
    Il faut pour cela, que ta classe T étende une classe permettant l'addition via l'opération +
    Aucune ne le fait (bon, à part en autounboxing, mais c limité)

  6. #6
    Membre expérimenté Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Par défaut
    peut etre avec java.lang.Number...

    mais si tu veux juste t entrainer a faire des methodes generiques teste avec des methodes hérité de object genre equals() ou un truc du genre


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

Discussions similaires

  1. problème avec une methode d'une classe
    Par membreComplexe12 dans le forum C++
    Réponses: 2
    Dernier message: 13/01/2011, 09h21
  2. Réponses: 8
    Dernier message: 12/01/2011, 19h00
  3. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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