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 :

Les generics, hors les types collection ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut Les generics, hors les types collection ?
    Bonjour,

    Les types génériques, ça sert à quelque chose ?
    hors types collections où la effectivement, cela
    prend (à mon avis) tout son intérêt ...

    Je ne vois pas d'exemple autre qu'une utilisation
    pour manipuler des collections d'objets ...

    Merci de vos avis !

  2. #2
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    Ma réponse fait très con mais il y a de l'idée !


    Eplucheur<T> =>
    Un éplucheur ... de quoi ?

    Eplucheur<Patate> =>
    De patates pardi !

    Eplucheur<Pomme> =>
    Où alors de pommes pourquoi pas.

    C'est surtout utile quand tu réalise une API qui utilise une classe dont tu ne sais que peu de choses.

    Par exemple, je travail pour ma part sur une API de réseau, et je gère tout ça en fonction des "clients" qui sont connecté à ma plateforme.
    Ainsi j'ai "NetworkPlateform<T extends Client>", "Connection<T extends Client>" ....
    De l'extérieur, lorsque tu utilise ensuite Eclipse, tu fait une classe qui hérite la classe Client et toutes les méthodes qui gèrent normalement des Clients d'après l'API, vont pouvoir te renvoyer ton propre type d'objets.

    Il est vrai que sans rien, une classe générique sera plus utilisée pour une liste, mais le mot clé "extends" est la pour faire des choses plus spécifiques.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut OK mais ...
    Merci pour ta réponse. Après avoir lu ta réponse, je me demande ... comment aurais-je fait sans les generics ?

    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class NetworkPlatform {
     
    Client c;
     
    NetworkPlatform (Client c_arg) {
     
    c = c_arg;
    }
    ......
    }

    Et ensuite avec une class MonClient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class MonClient extends Client {
    ...
    }
    je fais un new NetworkPlatform (new MonClient)

    Tu vois où je veux en venir ? qu'apporte la généricité dans ton
    exemple alors que l'utilisation de l'héritage (et du polymorphisme)
    me permet dans la class NetworkPlatform de manipuler un objet
    dont j'ignore la classe exacte ? Je sais juste qu'il s'agira
    d'un "Client" ....
    J'ai le sentiment que tu ne gagnes rien à utiliser la généricité
    dans ton exemple mais je ne le connais pas suffisamment et
    je dis peut être une bêtise ...

    jean

  4. #4
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    Heu, j'aurais un petit peu de mal à expliquer pour ma plateforme de réseau mais avec l'éplucheur ça se montre très facilement !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Eplucheur<T extends Legume> {
        public Eplucheur() { }
     
        public T eplucher(T legume) {
            //Met ici comment on épluche tes légumes
            return legume;
        }
    }
    Tes éplucheurs, quand tu leur donne une pomme, au retour, tu n'as pas une carotte mais bien une pomme.

    Si ensuite tu te contente de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Eplucheur {
        public Eplucheur() { }
     
        public Legume eplucher(Legume legume) {
            //Met ici comment on épluche tes légumes
            return legume;
        }
    }
    et que tu envoie une pomme, tu vas avoir besoin de faire un cast vers ta classe de pomme pour l'utiliser comme une pomme. De plus, rien ne dit que ton éplucheur sur un coup de tête ne vas pas te r'envoyer une patate.
    Dans la première solution, le cast est implicite.

  5. #5
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    oups, citer au lieu d'éditer. C'est pas bon.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    OK Grimly, je suis d'accord avec toi.
    Dès lors que l'on a besoin de faire des put et des get, l'avantage
    des generics est d'avoir un truc bien typé qui évitera au programmeur
    de faire des casts, susceptible de générer des exceptions
    au runtime.

    Et c'est un peu le cas de ton type Eplucheur même s'il n'apparait
    pas explicitement comme une classe Collection, on pourrait
    presque l'apparenter à une collection de 1 élément ...

    Je cherche en fait des exemples plus complexes et qui se détachent
    vraiment de la notion de collection.
    Je n'en trouve pas et tous les exemples de démonstration de generics
    que je trouve sur le web sont basées sur des collections.

    Par ailleurs, le seul bouquin que je connaisse sur les generics
    est un bouquin qui présente à la fois collection et generics.

    merci à toi pour tes réponses et exemples

    jean

    edit: adiGuba, désolé d'avoir oublié les balises et merci à toi !

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/11/2013, 01h10
  2. Réponses: 4
    Dernier message: 11/09/2006, 16h55
  3. Les polices dans les tables et les requêts
    Par zooffy dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 11h06

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