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 :

[ANT]Erreur de à la compilation avec généricité 1.5 ?


Sujet :

Langage Java

  1. #1
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut [ANT]Erreur de à la compilation avec généricité 1.5 ?
    Bonjour,

    J'ai l'erreur suivante lors de la compilation d'un projet via ANT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    167: type parameters of <C>C cannot be determined; no unique maximal instance exists for type variable C with upper bounds C,P
        [javac] C elmt = getObjAt(elmts, idx);
        [javac] ^
        [javac] Note: * uses or overrides a deprecated API.
        [javac] Note: Recompile with -Xlint:deprecation for details.
        [javac] Note: Some input files use unchecked or unsafe operations.
        [javac] Note: Recompile with -Xlint:unchecked for details.
        [javac] 1 error
    Quelqu'un saurait il pourquoi ? Et comment y remédier ?

    Merci d'avance

  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,


    Il faudrait voir le code et la signature de la méthode getObjAt()...

    a++

  3. #3
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    La signature est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static <P, C extends P> C getObjAt(final Collection<P> elmts, int idx)
    Et la ligne 167 sur laquelle est l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C elmt = getObjAt(elmts, idx);
    des idées ?

  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
    Apparemment la méthode (ou la classe) dans laquelle tu appelles getObjAt() utilise également les générics...
    Il faudrait donc le type de elmts ainsi que la déclaration de la généricité de cette méthode/classe...


    Si ce n'est pas le cas, alors C doit être remplacé par un type concret...


    a++

  5. #5
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Effectivement , la classe ( désolé je n'avais pas précisé ) utilise aussi les generics :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      public static <P, C extends P> C removeObjAt(Collection<P> elmts,
             final int idx) {
          C elmt = getObjAt(elmts, idx);
    Il faudrait donc le type de elmts ainsi que la déclaration de la généricité de cette méthode/classe...
    C'est à dire ?

    Merci d'avance

  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
    Citation Envoyé par elitost
    Il faudrait donc le type de elmts ainsi que la déclaration de la généricité de cette méthode/classe...
    C'est à dire ?
    C'est exactement ce que tu m'a donné mais c'est vrai que ma phrase n'est pas très clair (on est lundi matin )


    Je pense que le compilateur ne peut pas déterminer le type de C lorsque tu imbriques trop d'abstraction à ce niveau là...

    Par exemple lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    elmts = new List<Number>();
    ...
    Integer value = getObjAt(elmts, idx);
    Ca marche car il sait que getObjAt() doit être utilisé avec les types <Number,Integer>.

    Par contre lorsqu'il compile removeObjAt() il ne peut pas déterminer le type de C puisque cela peut être n'importe quel type qui hérite de P... (a la compilation de la méthode il n'y a aucun type réel associé)



    De plus cela est dangereux car si je comprend bien getObjAt() te renvoit l'élément dans la collection, mais si dans l'exemple ci-dessus je pourrais bien mettre des Long ce qui provoquerait une exception à l'exécution... bref ce n'est pas très sécurisé et c'est même à l'encontre du principe des genercis (remplacer les classcastexception en erreur/warning à la compilation).


    Question : pourquoi utilises-tu le typage suivant : <P, C extends P> ?

    Ceci serait plus sécurisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static <P> P removeObjAt(Collection<P> elmts, final int idx);
    ou alors ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static <C, P extends C> C removeObjAt(Collection<P> elmts, final int idx);
    a++

  7. #7
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Question : pourquoi utilises-tu le typage suivant : <P, C extends P> ?
    Aucune idée, le code ne vient pas de moi...

    En attendant je te remercie, nous avons modifié le code afin d'éviter les multiples abstractions pour la compilation.

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

Discussions similaires

  1. Généricité : erreur de compilation (avec Maven)
    Par 84mickael dans le forum Langage
    Réponses: 6
    Dernier message: 07/05/2009, 11h16
  2. erreur lors de compilation avec ld
    Par asphalte dans le forum C++
    Réponses: 7
    Dernier message: 20/05/2008, 14h12
  3. [ANT]Compilation avec ANT : erreur
    Par nana1 dans le forum ANT
    Réponses: 4
    Dernier message: 15/12/2005, 12h15
  4. Réponses: 3
    Dernier message: 22/08/2005, 18h28
  5. [FreePascal]Erreur de compilation avec Dev-Pascal
    Par youngeikichi dans le forum Free Pascal
    Réponses: 3
    Dernier message: 17/02/2005, 14h22

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