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 :

Généricité et type Joker (wildscards) en Java


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
    Octobre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 57
    Par défaut Généricité et type Joker (wildscards) en Java
    Bonjour,

    en observant le code source de la librairie GSON de google, qui permet au passage de transformer un objet java au format Json et vice-versa, j'ai observé que une instanciation d'un objet avec type joker, or cela est impossible ?

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     public GsonBuilder() {
        // setup default values
        ignoreVersionsAfter = VersionConstants.IGNORE_VERSIONS;
        serializeInnerClasses = true;
        prettyPrinting = false;
        escapeHtmlChars = true;
        modifierBasedExclusionStrategy = Gson.DEFAULT_MODIFIER_BASED_EXCLUSION_STRATEGY;
        excludeFieldsWithoutExposeAnnotation = false;
        longSerializationPolicy = LongSerializationPolicy.DEFAULT;
        fieldNamingPolicy = Gson.DEFAULT_NAMING_POLICY;
        instanceCreators = new ParameterizedTypeHandlerMap<InstanceCreator<?>>();
        serializers = new ParameterizedTypeHandlerMap<JsonSerializer<?>>();
        deserializers = new ParameterizedTypeHandlerMap<JsonDeserializer<?>>();
        serializeNulls = false;
        dateStyle = DateFormat.DEFAULT;
        timeStyle = DateFormat.DEFAULT;
        serializeSpecialFloatingPointValues = false;
        generateNonExecutableJson = false;
      }
    Merci d'avance.

  2. #2
    Membre actif Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Par défaut
    il me semble que c'est ParameterizedTypeHandlerMap qui est instancié donc qui a le constructeur et non pas InstanceCreator<?>

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Yup. On peut très bien faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<List<?>> lists = new ArrayList<List<?>>();
    Ce qui est interdit c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<?> list = new ArrayList<?>(); // compile pas
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 57
    Par défaut Généricité et type Joker (wildscards) en Java Répondre à la discussion
    Bonjour,

    merci pour vos réponses, mais concernant le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    List<List<?>> lists = new ArrayList<List<?>>(); // je reprends ta réponse ;)
     
    		Integer e = new Integer(5);
    		List<Integer> lists2 = new ArrayList<Integer>();
    		lists2.add(e);
    		lists.add(lists2);
    Pourquoi cette expression fonctionne alors que l'on instancie une ArrayList dont le type est une collection avec un type inconnu ?

    merci d'avance

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Parce que rien n'interdit de prendre une List de type connu et de la considérer soudainement comme une List de type inconnu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<?> list = new ArrayList<Integer>();
    C'est pareil et c'est légal. J'ai pris une List<Integer> et je l'ai donnée à quelque chose qui attend une List<?>.
    Ça marche, et ça ne pose pas de problème, car la cohérence de typage reste assurée.

    Ma List<?> étant de type inconnu, elle ne me donnera que des Object et ne peut donc pas se tromper. Et elle n'acceptera pas que j'y insère quoi que ce soit, aucune tentative ne compilera. La List<Integer> qu'elle était à l'origine ne contient donc bien rien d'autre que des Integer, puisque je n'ai pas pu y mettre autre chose. Où qu'on regarde, il n'y a aucune incohérence.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Débat] Type d'articles pour Java/JOGL(3D)
    Par TheSeb dans le forum 3D
    Réponses: 7
    Dernier message: 15/09/2008, 12h58
  2. Problème de type de données entre Java et Postgres
    Par La Piotte dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 31/01/2008, 20h23
  3. Problème de généricité de type privé
    Par dr_octopus74 dans le forum Ada
    Réponses: 5
    Dernier message: 20/11/2007, 22h27
  4. Les différent type de date en JAVA
    Par DarkWark dans le forum Langage
    Réponses: 2
    Dernier message: 12/06/2006, 12h41
  5. [Ada 95] Généricité de type/package
    Par kindool dans le forum Ada
    Réponses: 5
    Dernier message: 19/05/2005, 11h54

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