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 :

[Generics] Syntaxe bizarre


Sujet :

Langage Java

  1. #1
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut [Generics] Syntaxe bizarre
    Je decouvre encore des trucs avec les nouvelles syntaxes introduites dans Java 5 avec les Generics. Je viens de tomber par exemple sur l'API de la methode Collections.sort() : ca signifie quoi cette syntaxe au niveau du type de retour ? c'est "void" ou bien le "<T extends...>".

    Et du coup j'ai ce code qui me donne un avertissement dans Eclipse mais je ne sais pas comment le corriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<Truc> list = buildList();
    Collections.sort(list); //-> Type safety : unchecked invocation
    Sébastien ARBOGAST
    SCJP

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    public static <T extends Comparable<? super T>> void sort(List<T> list)

    Cela signifie que la methode sort() est parametree par un type T.

    <T extends Comparable<? super T>>

    Cela signifie que le type T doit implementer l'interface Comparable.

    Comparable<? super T>

    Cela signifie que l'interface Comparable implementee doit etre parametree par un type inconnu parent de la classe T.

    Ton warning signifie que ta classe Truc implemente juste Comparable sans type. Tu dois faire cela :

    class Truc implements Comparable<Truc>

    Tu peux aussi changer Comparable<Truc> en Comparable<UneClasseParenteDeTruc>.

    P.S : Lis cet excellent tutorial de Sun sur les generics : http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    Merci beaucoup, super explication, super tutorial.
    Sébastien ARBOGAST
    SCJP

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Citation Envoyé par Gfx
    Ton warning signifie que ta classe Truc implemente juste Comparable sans type.
    Je suis encore en 1.4, alors je me demande :
    en 1.5, si on déclare class Truc implements Comparable, on risque d'avoir des warnings,
    alors que si on déclare class Truc implements Comparable<Object> on en aura pas ??
    :
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Oui, c'est exact. En 1.4 l'interface Comparable definit la methode compareTo(Object) mais 1.5 definit Comparable<T> avec la methode compareTo(T). Du coup, si tu implementes Comparable<Object> tu te retrouves avec compareTo(Object) qui est compatible avec le code Java 1.4.

    Il y'a d'autres solutions pour zapper les warnings. On peut compiler avec -Xlint:unchecked ou encore ajouter l'annotation @SuppressWarnings("unchecked"). Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      @SuppressWarnings("unchecked")
      public static void main(String... args) {
        List<A> a = new ArrayList<A>();
        Collections.sort(a);
      }
    Romain Guy
    Android - Mon livre - Mon blog

  6. #6
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Petite question sur le @SuppressWarnings:
    c'est pas quand même un peu de la magouille de vouloir censurer le compilateur?

    Ca me fait penser à ce sketch des Inconnus où le présentateur météo se fait flinguer parce qu'il n'y a pas que des soleils sur sa carte...

    À quand le @SuppressErrors?
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  7. #7
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Un warning n'est qu'un avertissement, si tu sais ce que tu fais je ne vois pas le probleme de les supprimer. D'autant plus que ca documente la suppression dans le code.
    Romain Guy
    Android - Mon livre - Mon blog

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

    Citation Envoyé par Gfx
    Un warning n'est qu'un avertissement, si tu sais ce que tu fais je ne vois pas le probleme de les supprimer. D'autant plus que ca documente la suppression dans le code.
    Tout à fait d'accord !
    Surtout que Java 5.0 (et en particulier les Generics) a introduit un grand nombre de warning.

    Ce qui est très bien car cela permet de prendre conscience d'un problème potentiel, et de l'analyser avant de finaliser l'application. Mais dans certains cas ce warning n'a pas lieu d'être ou est trop restrictif pour ton cas particulier, l'annotation @SuppressWarning permet alors d'obtenir une compilation propre.

    Si demain tu compiles une application avec 80 warnings "inutile", il y a de forte chance que tu passes à coté d'un 81ème warning qui pourrait se présenter plus problématique...


    Bien entendu il faut éviter de l'utiliser a tout bout de champs, et réduire au minimum sa portée (en évitant de le mettre sur des méthodes de 300 lignes...)



    a++

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

Discussions similaires

  1. livre indiquant une syntaxe bizarre
    Par philipix dans le forum Langage
    Réponses: 5
    Dernier message: 03/06/2015, 14h50
  2. Syntaxe bizarre "<<<"
    Par sungvadan dans le forum Langage
    Réponses: 2
    Dernier message: 14/02/2014, 14h24
  3. Syntaxe bizarre dans script captcha
    Par Sylvain__A_ dans le forum Langage
    Réponses: 6
    Dernier message: 20/03/2009, 12h45
  4. Erreur de syntaxe bizarre
    Par sash6 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 12/06/2008, 15h30
  5. [Generic] ClassCastException bizarre
    Par in dans le forum Langage
    Réponses: 10
    Dernier message: 24/09/2007, 17h59

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