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 Comparable <T>


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 200
    Par défaut Generics Comparable <T>
    Bonjour,

    J'aimerais comprendre la syntaxe ci-dessous:

    public <T extends Serializable & Comparable<T>> void method(T data)
    C'est un exemple que j'ai chopé dans la FAQ java.

    En fait voici mes interrogations:

    1- Pourquoi "T" et pas "S" par exemple.
    2- Pourquoi Comparable<T> et pas Comparable.

    Je suis preneur de toute explication.

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par mafanta Voir le message
    1- Pourquoi "T" et pas "S" par exemple.
    Par convention les types Generics utilisent une seule et unique lettre en majuscule. Cela permet de les distinguer des autres types...

    Après S, T, U ou une autre lettre cela n'a aucune importance et ca reste au choix du développeur. Les plus souvent utilisés sont T (pour Type), E (pour Element) K (pour Key), ou V (pour Value)...


    Citation Envoyé par mafanta Voir le message
    2- Pourquoi Comparable<T> et pas Comparable.
    Ben le second n'utilise pas les Generics et n'est donc pas typé...


    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 200
    Par défaut
    Ben le second n'utilise pas les Generics et n'est donc pas typé
    Oui mais je ne comprends pas la syntaxe entierement c'est à dire:

    public <T extends Serializable & Comparable<T>> void method(T data)
    Par contre je comprends un peu plus la syntaxe suivante:

    public <T extends Serializable & Comparable> void method(T data)

  4. #4
    Membre éprouvé Avatar de +Guilhem
    Profil pro
    Ingénieur d'études Java/JEE
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études Java/JEE

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Tout dépend du contexte, de la problématique à laquelle tu es confrontée...
    Mais depuis l'introduction des generics (Java 5), il est conseillé de typer les classes génériques, même si cela n'est pas obligatoire. A la limite tu peux utiliser les wildcards (Comparable<?>).

    En quoi tu comprends plus la signature avec Comparable plutôt que Comparable<T> ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 200
    Par défaut
    En gros ce que je ne comprends pas c'est public:
    <T extends Serializable & Comparable<T>> void method(T data)
    Pour moi ca veut dire que method est une méthode qui prends en argument T qui étends la classe Serializable et Comparable (est-ce bien ca?).

    Si oui, je ne comprends alors pas pour quoi "<T>" apres Comparable.

    Merci pour vos explications.

  6. #6
    Membre éprouvé Avatar de +Guilhem
    Profil pro
    Ingénieur d'études Java/JEE
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études Java/JEE

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Citation Envoyé par mafanta Voir le message
    Pour moi ca veut dire que method est une méthode qui prends en argument T qui étends la classe Serializable et Comparable (est-ce bien ca?).
    Oui (ou plutôt en l'occurrence implémente).

    Citation Envoyé par mafanta Voir le message
    Si oui, je ne comprends alors pas pour quoi "<T>" apres Comparable.
    Cela veut simplement dire que "un objet de type T est comparable à un objet de type T". Rien de plus.
    Si on avait pas indiqué le <T>, cela aurait voulu dire que "un objet de type T est comparable à un objet de type quelconque".

    Avec <T> on limite simplement le champ d'action en spécifiant explicitement le type concerné.

Discussions similaires

  1. Generics, Comparable et classes abstraites
    Par Bowbaq dans le forum Langage
    Réponses: 2
    Dernier message: 27/03/2010, 01h48
  2. Generics et Comparator
    Par benwit dans le forum Langage
    Réponses: 7
    Dernier message: 17/06/2008, 19h04
  3. [LG][FAQ]comparer des fichiers
    Par lucke dans le forum Langage
    Réponses: 11
    Dernier message: 01/06/2003, 18h02
  4. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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