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] notation incomprise


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut [Generics] notation incomprise
    Hello,

    Je me pense sur le pattern Visitor en ce moment.
    Dans des exemples que j'ai pu voir, je suis tombé sur cette signature de méthode que je ne comprend as très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    public <T> T accept(Expression<T>){}
    Je ne comprend pas à quoi correspond <T> T .

    Merci d'avance pour votre aide !

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 890
    Par défaut
    Salut,

    C'est juste pour dire que ça retourne un élément du même type que le type du paramètre.

    Ca permet d'écrire des méthodes génériques, qui s'adapteront quelque soit le type de l'objet passé.

  3. #3
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Merci pour vos réponses!

    Mais quelle différence alors avec la notation suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public T maMethode(MonParametre<T>);
    Le type retourné est bien du même type que le paramètre dans ce cas la? non?



    Merci encore pour votre aide!

  4. #4
    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 fabszn
    D'après ce que j'ai compris, cela veut dire que <T> après le public n'est la qu'a titre informatif.
    De le mettre ou pas n'a pas d'impact sur la compilation de la classe?
    Non !!!

    Le <T> indique que la méthode est paramétré (utilise les Generics), et T représente son type paramétré. Cela permet d'écrire des méthodes paramétrés indépendantes du type de la classe...

    En effet les méthodes peuvent être paramétré de deux manières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MaClasse<T> {
     
    	public T accept(Expression<T> e) {
    		...
    	}
    }
    Ici la classe MaClasse est paramétré avec le type T, et sa méthode accept() également.

    Cela nous permet d'écrire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaClasse<String> maClasse = ...
    Expression<String> expr = ...
     
    String s = maClasse.accept(expr);
    Mais interdira de faire ceci (car le type paramétré de la méthode est en fait le même que celui de la classe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaClasse<String> maClasse = ...
    Expression<Integer> expr = ...
     
    Integer i = maClasse.accept(expr);
    On ne peut pas utiliser Integer car le type attendu est String !


    A l'inverse, il est possible de ne paramétré qu'une méthode indépendamment de la classe, et le paramétrage se place alors juste avant le type de retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MaClasse {
     
    	public <T> T accept(Expression<T> e) {
    		...
    	}
    }
    Ici la classe MaClasse n'est pas paramétré. Par contre sa méthode accept() l'est, et elle permet de définir une relation entre son paramètre (Expression<T>) et son type de retour (T).

    Cela nous permet d'utiliser la méthode accept() avec des types différents, tout en gardant une certaines cohérences. Le code suivant est ainsi permis :
    [code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MaClasse maClasse = ... // Pas de Generics
     
    Expression<String> expr = ...
    String s = maClasse.accept(expr);
     
    Expression<Integer> intExpr = ...
    Integer i = maClasse.accept(intExpr );
    Mais bloquera quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String s = maClasse.accept(intExpr); // car intExpr est Expression<Integer)


    Bien sûr il est également possible de cumuler les deux, par exemple :
    [code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MaClasse<E> {
     
    	public <T> T accept(Expression<T> e) {
    		...
    	}
    }
    La classe est paramétré par E et la méthode par T !


    a++

  5. #5
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Ok maintenant c'est bien clair!

    Merci beaucoup!!

    Bonne journée!

  6. #6
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 890
    Par défaut
    adiGuba il est trop fort......... ça fait peur

    Merci pour l'explication !

    A+

  7. #7
    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 fabszn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public <T> T accept(Expression<T>){}
    la méthode est elle même paramétrée par un type
    en fonction du contexte le compilateur va te garantir que si tu passes une Expression<DeMaConsideration> tu vas récupérer un objet DeMaConsideration.

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

Discussions similaires

  1. Notation avec Generic
    Par onlytoine dans le forum Langage
    Réponses: 8
    Dernier message: 01/02/2008, 20h15
  2. [Jointure réflexive] problème en notation pointée
    Par Kraz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/01/2005, 13h30
  3. [Generics] Classe générique
    Par norkius dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2004, 15h57
  4. Conversion fpu -> notation scientifique décimale
    Par Alucard_Math dans le forum Assembleur
    Réponses: 4
    Dernier message: 13/05/2004, 16h44
  5. [Flash MX 2004]Notation par point
    Par willowII dans le forum Flash
    Réponses: 4
    Dernier message: 28/04/2004, 13h23

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