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

Affichage des résultats du sondage: Etes vous pour ou contre cette proposition ?

Votants
368. Vous ne pouvez pas participer à ce sondage.
  • Pour

    280 76,09%
  • Contre

    88 23,91%
Langage Java Discussion :

JDK 7: Proposition 1 : Constructeurs simplifiés pour la généricité -> Intégrée [Débat]


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<String, List<String>> 
      anagrams = new HashMap();
    Ce code marche très bien aujourd'hui, en tout cas sur mon PC.... Que faut t-il changer ?

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    J'ai voté pour, mais j'ai peur que ça complique encore la prise en main des generics.
    Citation Envoyé par bulbo Voir le message
    Même si pour la compatibilité, l'autre écriture est bien nécessaire, je n'arrive pas a voir un cas ou cela aurait un intérêt.
    Tu arriverais a nous filer un exemple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<String, ? extends Collection<? extends Image>> map;
    map = new HashMap<String, Set<BufferedImage>>();
    Il faut préciser le type de la Map, ce qui est normal, mais qui n'est pas évident à comprendre au début.

    Mais je vote pour.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 41
    Par défaut Pour
    Je suis pour et souhaite aussi que les deux syntaxes restent disponible...
    Si cela est _impossible_... (Pas de raison, mais...) J'accepte quand meme, vu que le generique et l'instance ne sont que repetition de toutes facons...

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 691
    Par défaut
    Je suis également pour et ne vois pas non plus l'interet du <>, vu que la généricité est seulement un sucre syntaxique.

  5. #5
    Expert confirmé


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Par défaut
    Citation Envoyé par pierreact Voir le message
    Je suis pour et souhaite aussi que les deux syntaxes restent disponible...
    Si cela est _impossible_... (Pas de raison, mais...) J'accepte quand meme, vu que le generique et l'instance ne sont que repetition de toutes facons...
    Tout ce qui est proposé ici permettra toujours de code comme avant. On n'enlève rien. Les "anciennes" syntaxes seront toujours valides. On ne fait qu'en introduire de nouvelles.

    Vincent

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    J'ai voté contre.

    1. Par principe, je suis pour la séparation du type de la variable et du type de l'instance. J'irai meme jusqu'a imposer que le type d'une variable soit toujours une interface.

    2. Si le but c'est la lisibilité alors le gain est vraiment minime. Autant carrément supprimer le mot clé new et faire des allocations facon "C":

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HashMap<String, List<String>> anagrams;
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut Pour, autre syntaxe possible.
    Mais j'ai hésité entre l'avantage de simplifier la lisibilité, et de complexifier la compréhension de la grammaire Java (de moins en moins accessible)

    Citation Envoyé par pseudocode Voir le message
    1. Par principe, je suis pour la séparation du type de la variable et du type de l'instance. J'irai meme jusqu'a imposer que le type d'une variable soit toujours une interface.

    2. Si le but c'est la lisibilité alors le gain est vraiment minime. Autant carrément supprimer le mot clé new et faire des allocations facon "C":

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HashMap<String, List<String>> anagrams;
    Dans l'idée de déclarer et instancier en une seule instruction j'avais aussi pensé à la syntaxe VB/LotusScript, qui a cependant ton inconvénient N°1: de ne pas utiliser d'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // pseudo VB de LotusScript
    dim session as new Session()
     
    //transposé en Java Generics
    new HashMap<String,Person>(10) annuaire;
    De toutes façon, je trouve que c'est une peu du "sucre" syntaxique,
    est-ce qu'on ne pourrait pas carrément avoir un précompilateur comme en C, avec des des %Define et des typedefs, pour alléger les types trops longs à écrire?
    ça remplirait finalement la même fonction.

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    dans l'exemple qui est donné je ne suis pas tellement gêné par la répétition, c'est plus l'absence de désignation de ce générique qui est problématique!

    à la place de

    Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

    Je préférai:

    generic <String, List<String>> AnagramItem;
    ...
    Map<AnagramItem> anagrams = new HashMap<AnagramItem>();

    ce qui permettrait de facilement remplacer un type générique partout,

    de faire de l'introspection sur les types génériques ...

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Pas vraiment non car pouvoir faire de la reflection suppose que le bytecode stocke quelque part une information sur le type utilise ce qui n'est actuellement pas le cas (dans leur implementation actuelle, les generics ne sont que du sucre syntaxique pre-compilation pour eviter les casts manuels) sans que le programmeur ne s'en charge lui-meme.

    Par contre, un typedef ou equivalent n'etait-il pas en discussion pour cette release ou une suivante ???
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Membre confirmé Avatar de fisico
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 98
    Par défaut
    contre, l'apport de l'innovation ne change pas grand chose, même rien du tout. on a pris l'habitude de travailler ainsi.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Je suis contre, tant qu'il y a la mécanique d'autocomplétion dans la majorité des IDEs, cette forme d'instantiation ne va ajouter que de difficultés au niveau de la lisibilité du code et le rendre moins compréhensible sur tout quand elle est loin de la déclaration de la référence.

  12. #12
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par emile.coue Voir le message
    cette forme d'instantiation ne va ajouter que de difficultés au niveau de la lisibilité du code et le rendre moins compréhensible sur tout quand elle est loin de la déclaration de la référence.
    De la manière dont je l'ai compris, ce ne serait possible que dans le cas d'une instantiation en ligne... un peut comme pour les tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	int[] values = { 1, 2, 3, 4 }; // OK
     
    	values = { 1, 2, 3, 4 }; // ERREUR
    	values = new int[] { 1, 2, 3, 4 }; // OK
    a++

  13. #13
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    Egalement pour, et pour les mêmes raisons citées précedemment, redondance d'information, mais pour garder les 2 notations

  14. #14
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Oui MAIS quel est l'interet de mettre <> dans l'appel au contructeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<String, List<String>> 
      anagrams = new HashMap<>();
    Ceci serait mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<String, List<String>> 
      anagrams = new HashMap();
    Pour le reste, l'information type est deja convoye dans la partie gauche de l'affectation.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  15. #15
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Voté "pour" pour toutes les raisons évoquées.

    Citation Envoyé par bouye Voir le message
    Oui MAIS quel est l'interet de mettre <> dans l'appel au contructeur.
    Je me pose la même question. Aucun intérêt de toute façon.

  16. #16
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Citation Envoyé par bouye Voir le message
    Oui MAIS quel est l'interet de mettre <> dans l'appel au contructeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<String, List<String>> 
      anagrams = new HashMap<>();
    Ceci serait mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<String, List<String>> 
      anagrams = new HashMap();

    En effet, c'est clair que je ne vois pas l'intérêt d'ajouter le <> ...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  17. #17
    Membre confirmé Avatar de ludosoft
    Homme Profil pro
    Chef de projet technique
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Par défaut
    Citation Envoyé par bouye Voir le message
    Oui MAIS quel est l'interet de mettre <> dans l'appel au contructeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<String, List<String>> 
      anagrams = new HashMap<>();
    Ceci serait mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<String, List<String>> 
      anagrams = new HashMap();
    Pour le reste, l'information type est deja convoye dans la partie gauche de l'affectation.
    Je pense qu'il ne faut pas trop en enlever non plus hein... Le fait de mettre "<>" indique clairement à l'oeil que ce n'est pas une "simple HashMap" qui est instanciée.

    Et ça ferait quoi ce code là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map 
      anagrams = (Map<String, List<String>>)new HashMap<>();

  18. #18
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    Milles excuses c'est vrai que les générics n'acceptent pas l'heritage et on ne peut pas faire de polymorphisme avec.

    Snif.

  19. #19
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par ludosoft Voir le message
    Je pense qu'il ne faut pas trop en enlever non plus hein... Le fait de mettre "<>" indique clairement à l'oeil que ce n'est pas une "simple HashMap" qui est instanciée.
    Ben si justement, c'est tout la le probleme, ca ne reste que du sucre syntaxique au final on a bien une map toute simple et le compilateur qui met des cast la ou il faut dans le bytecode (en gros la ou on les mettait manuellement en java 1.4-). Donc aucune difference avec la creation d'une Map<Object, Object>.

    Et ça ferait quoi ce code là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map 
      anagrams = (Map<String, List<String>>)new HashMap<>();
    On peut deja faire sans aucun probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Map anagrams = (Map<String, List<String>>)new HashMap();
    Il est possible de caster HashMap<Object, Object> en Map<String, List<String>> et de recaster cette derniere en Map<Object, Object> . On a juste le warning habituel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Note: test\TestCast.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    test\TestCast.java:24: warning: [unchecked] unchecked cast
    found   : java.util.HashMap
    required: java.util.Map<java.lang.String,java.util.List<java.lang.String>>
        Map anagrams = (Map<String, List<String>>)new HashMap();
                                                  ^
    1 warning
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  20. #20
    Membre confirmé Avatar de ludosoft
    Homme Profil pro
    Chef de projet technique
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Par défaut
    Merci pour ces précisions bouye

Discussions similaires

  1. JDK 7: Proposition 9 : Notation de tableau pour List et Map -> Intégrée
    Par vbrabant dans le forum Collection et Stream
    Réponses: 58
    Dernier message: 03/09/2009, 15h35

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