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] super & extends


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut [Generics] super & extends
    Comment définir un paramètre de généricité pour qu'il soit à la fois une super-classe de A et une sous-classe de B?

    Pour qu'il soit le sous-type de plusieurs types, on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class MaClass<T extends A & B>
    Mais pour mélanger le surtypage et sous-typage?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    Je pense que ce n'est pas possible, on ne peut spécifier que la relation d'héritage. Si tu veux autoriser uniquement les super-classes de A ET les sous-classes de B, il faut donc écrire une classe C qui hérite de B, et faire hériter A de C.

    A -> C -> B (Désolé, ce n'est pas terrible comme diagramme UML )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class MaClasse<T extends C> {}

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par had35
    Je pense que ce n'est pas possible, on ne peut spécifier que la relation d'héritage. Si tu veux autoriser uniquement les super-classes de A ET les sous-classes de B, il faut donc écrire une classe C qui hérite de B, et faire hériter A de C.

    A -> C -> B (Désolé, ce n'est pas terrible comme diagramme UML )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class MaClasse<T extends C> {}
    Le problème c'est que la classe C peut-être quelconque...

    Par exemple, tu as une interface Flux, implémentée par FluxDirect, dont hérite Chaine.
    Flux <- FluxDirect <- Chaine

    Tu veux spécifier dans flux que toutes les sous-classes doivent implémenter Comparable<?>, mais où, ? n'est pas quelconquecar par exemple on ne veut pas implémenter Comparable<Integer> (ce qui n'aurait aucun sens)...
    Et on ne veut pas non plus forcément obliger à pouvoir comparer tous les flux entre eux (seulement les chaines de type A avec les chaines de type A par exemple)...

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    Je crois voir ce que tu veux dire.

    Dans l'exemple que je t'ai donné, C n'est pas un type quelconque, c'est toi qui le défini et le fait hériter et implémenter des types que tu veux traiter dans ton template MaClasse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class C extends Chaine implements Comparable<Chaine> {}
     
    class MaClasse<T extends C> {}
    Cela obligera les utilisateurs de MaClasse à instancier C ou à en hériter, mais je ne crois pas que ce soit possible de faire autrement.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    En réfléchissant à ton problème, je me rend compte que ce que je te propose n'apporte rien Tu faisais référence au tutoriel de Romain Guy.

    Je effectué des essais de compilation, apparement, le mot-clé super ne peut être utilisé que pour spécifier les arguments requis par une méthode et non pour définir un type générique.

Discussions similaires

  1. Héritage Extend Super()
    Par Vinc06 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 16/04/2015, 12h16
  2. Extends et Super()
    Par juninho269 dans le forum Langage
    Réponses: 6
    Dernier message: 27/03/2008, 08h10
  3. Problème lors du EXTEND d'un tableau
    Par banana31 dans le forum Oracle
    Réponses: 14
    Dernier message: 10/02/2004, 10h58

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