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 :

Question sur les generics


Sujet :

Langage Java

  1. #1
    Membre actif Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Points : 240
    Points
    240
    Par défaut Question sur les generics
    Bonjour,

    En lisant les articles, j'ai compris que les Generics n'étaient pas un des gros points forts dans Java ( + typage renforcé), et critiquer par certains ( - perte de l'information au runtime).

    Je lisais que les ingénieurs ayant participer au développement des Generics ont cherché à être retro-compatible avec les versions précédente à 1.5. Mais je n'arrive pas à comprendre en quoi cela aurait pu casser le code précédent ? Comme les membres synthetic, pourquoi l'information ne peut être garder ?

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par miya Voir le message
    En lisant les articles, j'ai compris que les Generics n'étaient pas un des gros points forts dans Java ( + typage renforcé), et critiquer par certains ( - perte de l'information au runtime).
    Perso je ne suis pas du tout d'accord là dessus...

    Les Generics ont certes des désavantages, mais également d'autres avantages non négligeable (rétrocompatibilité, meilleure covariance/contravariance, pas de duplication des types).


    Citation Envoyé par miya Voir le message
    Je lisais que les ingénieurs ayant participer au développement des Generics ont cherché à être retro-compatible avec les versions précédente à 1.5. Mais je n'arrive pas à comprendre en quoi cela aurait pu casser le code précédent ? Comme les membres synthetic, pourquoi l'information ne peut être garder ?
    Dans la majorité des langages, les Generics/Templates sont basé sur des templates justement. C'est à dire que grosso-modo le code sert de modèle et le compilateur fait des remplacement du type "T" par le type utilisé. En C# c'est un peu la même chose sauf que ceci est fait à l'exécution.

    Mais du coup cela produit des classes différentes. Ainsi dans ce cas List<String> n'est pas le même type que List<Date>, et on ne peut pas caster cela dans un List ou un List<?>.

    Si Java avait opté pour cette solution là, il aurait fallu abandonner l'API de Collections pour créer une nouvelle API totalement incompatible.
    C'est d'ailleurs ce qui a été fait dans C# avec les namespaces System.Collections et System.Collections.Generic...



    Reste la solution d'ajouter un membre synthetic comme tu le proposes, mais cela augmenterait l'utilisation mémoire de chaque instance pour le stocker, ce qui n'est pas forcément toujours souhaitable (le surcoût pourrait être important pour les "petits" types), alors que ce n'est pas forcément nécessaire...
    autant laissé cela à la charge du dev s'il en a vraiment besoin.


    a++

  3. #3
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Juste pour compléter mon propos :

    • Un des gros avantages du type-erasure, c'est d'être bien plus simple à mettre en place, surtout dans un langage dynamique faiblement typé !
      On peut toujours utiliser les versions non-Generics tout en utilisant des méthodes les utilisants.

    • Un des gros désavantages, c'est l’incompatibilité avec les types primitifs, ce qui oblige à réécrire des classes spécifiquement.



    D'ailleurs sur ce dernier point le projet Valhalla, qui devrait apporter les types-valeurs dans Java, pourrait changer la donne.
    En effet l'ajout de type-value impliquerait un nombre infini de type incompatible avec les Generics...
    Pour éviter cela ils envisagent le support des types primitifs/values dans les Generics via une sorte de "reification" pour ces types, couplé à la notion de "Specialization" qui permet de modifier le type (tout ou partie) selon son type paramétré.
    Ex :
    • List<int> pourrait proposer directement une méthode sum(), qui ne serait pas présente avec d'autres types comme List<String> ou List<char>...
    • ArrayList<boolean> pourrait être basé sur un BitSet au lieu d'un boolean[] (ce dernier étant plus couteux en mémoire).
    • Certaines méthodes potentiellement "ambigu" (comme remove(T) et remove(int)) seraient exclusive au références (pour la rétrocompatibilité), et serait "remplacées" par des versions mieux nommées (comme removeByValue(T) et removeByIndex(int) par exemple).
    • ...




    a++

Discussions similaires

  1. question sur les generics
    Par yuriyan dans le forum C#
    Réponses: 4
    Dernier message: 27/12/2010, 02h12
  2. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 03h38
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 14h59
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 09h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 17h11

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