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] Génériques à types multiples


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
    Décembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 96
    Par défaut [generics] Génériques à types multiples
    Bonjour,

    je vais essayer d'être clair, bien que ce ne le soit pas trop dans ma tête.

    J'ai créé une classe générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface MaClass<T,U>
    {
      ...
    }
    Grâce à çà, je peux instancier des objets de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClass<String, boolean> aaa = new MaClass<String,boolean>();
    Ce que je voudrais pouvoir faire , c'est çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClass<String> aaa = new MaClass<String>();
    Existe-t-il un moyen de rendre un type optionnel avec les génériques?

    Merci d'avance,
    Nico

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Sauf erreur c'est impossible, mais tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClass<String, Object> aaa = new MaClass<String,Object>();

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Citation Envoyé par sanchou
    Grâce à çà, je peux instancier des objets de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClass<String, boolean> aaa = new MaClass<String,boolean>();
    À bon tu es sûr ?... À ce que je sais on ne peut pas utiliser de type primitif comme type générique...

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClass<String,Boolean> aaa = new MaClass<String,Boolean>();

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 96
    Par défaut
    Oui, désolé, j'ai pas fait de copier-coller... Il fallait lire Boolean

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    public interface MaClass
    et

    MaClass aaa = new MaClass();
    ... j'imagine que le second membre de cette dernière instruction est une autre classe qui implémente l'interface MaClass, sinon je ne vois pas comment tu pourrais l'instancier ....

    Sinon, tu peux soit :
    Ne déclarer aucun type paramétré, et donc le tout va être considére comme Object :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaClass x = new MaImpl();
    Soit implémenter en spécifiant explicitement l'un des types paramétrés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class MaClass1<X> implements MaClass<X, Boolean>{
     :
     :
     :
    }
     
    MaClass<Long, Boolean> x = new MaClass1<Boolean>();
    ou encore
    MaClass  x = new MaClass1<Boolean>();
    Dans tous les cas, à la déclaration du MaClass (l'interface paramétrée) :
    • Soit tu la déclares sans aucun type paramétré
    • Soit tu la déclares avec tous les types paramétrés


    Ce n'est qu'avec l'implémentation que tu peux réduire le nombre des types paramétrés.

    Bonne chance.

  7. #7
    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 sanchou
    Existe-t-il un moyen de rendre un type optionnel avec les génériques?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClass<String,?> m = new MaClass<String,Object>();
    Mais il faut quand même indiquer le ?

Discussions similaires

  1. generics et types primitifs
    Par BakaOnigiri dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 28/05/2008, 17h03
  2. FileFilter générique type linux
    Par pverley dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 21/08/2007, 15h12
  3. Tableaux de types multiples
    Par Xorgnem dans le forum C++
    Réponses: 43
    Dernier message: 03/07/2007, 17h01
  4. Generics et Types Incompatibles
    Par atnnn dans le forum Langage
    Réponses: 6
    Dernier message: 22/01/2007, 16h26
  5. Réponses: 4
    Dernier message: 17/10/2006, 12h00

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