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 question basique .. mais ?


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Par défaut Generics question basique .. mais ?
    Bonjour,

    Dans les Generics : Pourquoi

    class Essai <T extends Number> {} est OK

    et

    class Essai <T super Integer> {} est NOT OK

  2. #2
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Citation Envoyé par michelp3 Voir le message
    Bonjour,

    Dans les Generics : Pourquoi

    class Essai <T extends Number> {} est OK

    et

    class Essai <T super Integer> {} est NOT OK
    Car ça ne veux rien dire.

    Le mot clé extends permet de définir une classe comme étant une extension d'une autre (une sous classe).

    Le mot clé super sert simplement à faire appel aux méthode de la classe mère, en aucun il ne permet de définir un lien de parenté entre classe.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Citation Envoyé par michelp3 Voir le message
    class Essai <T extends Number> {} est OK

    et

    class Essai <T super Integer> {} est NOT OK
    Parce que ce ne sont pas des jokers comme <? extends Number> ou <? super Number> qui servent à donner de l'information sur le joker.
    Ici c'est juste une définition de type paramètre, noté T, sur lequel on sait tout puisque c'est nous qui le déclarons, et nous y ajoutons une contrainte "T doit être un sous-type de Number." Ce n'est pas une information c'est une obligation.

    La contrainte "T doit être un sous-type de Number" est utile, ça permet d'appliquer le polymorphisme : le type T peut appeler les méthodes de Number et on peut toujours assigner un T à un Number.

    Une contrainte du genre "T doit être un sur-type de Number" ne sert à rien -_-°.

    Citation Envoyé par Nico02 Voir le message
    Le mot clé super sert simplement à faire appel aux méthode de la classe mère, en aucun il ne permet de définir un lien de parenté entre classe.
    Pas forcément, il y a aussi Comparator<? super E> cmp; qui indique un type "Comparator de on ne sait pas quoi, mais dont on sait que c'est un type ascendant de E. On peut donc lui demander de comparer des E".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Citation Envoyé par thelvin Voir le message
    il y a aussi Comparator<? super E> qui indique un type "Comparator de on ne sait pas quoi, mais dont on sait que c'est un type ascendant de E. On peut donc lui demander de comparer des E".
    Je ne savais pas

    Meaculpa

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Le mot clé extends permet de définir une classe comme étant une extension d'une autre (une sous classe).
    Dans ce contexte ce n'est pas exact (et ça a donné lieu à des engueu*** lors des spécifications).
    Ici le mot "extends" a un autre sens comme plutot "affectable à ...." exemple <T extends Serializable> (Serializable n'est pas une classe)
    autre exemple (facheux) :
    <T extends Object & Comparable<? super T>> (dans java.util.Collections)

Discussions similaires

  1. Question basique mais perturbante.
    Par profete162 dans le forum Android
    Réponses: 2
    Dernier message: 29/09/2009, 15h11
  2. Question Basique Gestion Erreur VBA ...
    Par Le_Phasme dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h42
  3. Question basique
    Par PatLeOuf dans le forum C++
    Réponses: 1
    Dernier message: 23/03/2005, 10h57
  4. Réponses: 5
    Dernier message: 04/03/2005, 12h14

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