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

Eclipse Java Discussion :

"warning" dans eclipse (utiliser les Generic)


Sujet :

Eclipse Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Isher
    Invité(e)
    Par défaut "warning" dans eclipse (utiliser les Generic)
    Bonjour,

    Je voudrais comprendre un "warning" donné par eclipse bien que cela n'empeche pas mon programme de focntionner correctement. Lorsque j'utilise des structures de données type Vector ou Hashtable, Eclipse me dit:

    Type safety: the method shoud be parameterized.

    si je ne récupère pas la valeur de retour de la méthode.

    Je n'ai rien trouvé de réellement clair avec google, quelqu'un pourrait-il m'éclairer à ce sujet?

    Merci d'avance
    --
    Isher

  2. #2
    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
    Salut,

    C'est un warning relatif à l'utilisation (ou non) des Generics...

    Est-ce que tu utilises les Vector ou Hashtable avec les Genercs ?
    Sinon montre un bout de code...

    a++

    PS : Il est preferable d'utiliser ArrayList et HashMap qui ne sont pas synchronizé et donc potentiellement plus véloce...

  3. #3
    Isher
    Invité(e)
    Par défaut
    Citation Envoyé par adiGuba
    Est-ce que tu utilises les Vector ou Hashtable avec les Generics ?
    Heu non, a moins que je sois comme monsieur Jourdin et que je fasse de la prose sans le savoir. Je n'utilise pas les generics.

    Citation Envoyé par adiGuba
    Sinon montre un bout de code...
    Mon code est assez simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    m_hshStatusColor = new HashMap(5);
    m_hshStatusColor.put("repos", Color.WHITE);
    Citation Envoyé par adiGuba
    PS : Il est preferable d'utiliser ArrayList et HashMap qui ne sont pas synchronizé et donc potentiellement plus véloce...
    effectivement, je le savais pour Vector et c'est corrigé pour Hashtable.

  4. #4
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Par défaut
    ce warning est simple : tu codes en java5, et tu pourrais spécifier dans tes listes et map le type des objets possibles grace aux generics (voir le tutoriel sur les nouveautés java5 sur la section java de dvp).

    Eclipse t'indique que ca serait plus sur, car tes listes deviennent a ce moment la type safe

  5. #5
    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 Isher
    Citation Envoyé par adiGuba
    Est-ce que tu utilises les Vector ou Hashtable avec les Generics ?
    Heu non, a moins que je sois comme monsieur Jourdin et que je fasse de la prose sans le savoir. Je n'utilise pas les generics.


    Et bien le problème vient justement de là...
    Les Generics permettent de controller le type des éléments lors de la compilation. Avec Java 5.0 toutes les collections les utilisent et ce warning indique que tu utilises une de ces classes sans spécifier le type...
    Donc le compilateur ne peut pas effectuer les vérifications et il te sort un warning...

    Avec les Generics cela pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<String,Color> m_hshStatusColor = new HashMap<String,Color>(5);
    m_hshStatusColor.put("repos", Color.WHITE);
    Le <String,Color> permet de spécifier le type de la clef et de la valeur de la Map. Ainsi le compilateur pourra provoquer une erreur si tu tapes par erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_hshStatusColor.put("repos", "WHITE"); // la Valeur n'est pas du type Color
    Pour plus d'info je t'invite à consulter la partie sur les Generics dans le tutoriel de Lionel Roux sur Java 5.0...


    Le problème c'est que cela rend ton code incompatible avec une JVM plus ancienne, et que tu ne peux donc pas l'utiliser avec une JVM 1.4 par exemple...


    Si cela te pose problème il suffit de passer le niveau du code en 1.4 pour que ces warning n'apparaisse plus...

    a++

  6. #6
    Isher
    Invité(e)
    Par défaut
    Merci pour vos réponses.
    J'étais effectivement arrivé au code que tu donnes après le post de Lunatix. La lecture du didacticiel sur les nouveautés ainsi que quelques liens glanés sur google m'ont fait un peu mieux decouvrir les Generic qui ressemble aux Templates du C++, je dirai en plus simple.

    Je vais continuer à coder en version 1.5, je n'ai pas encore rencontré de soucis de compatibilité.

    Sinon, le problème n'est pas totalement clos. Eclipse propose d'assigner le résultat de la méthode put pout lever le warning. En quoi cela léve-t-il l'incertitude sur le type? A moins que j'en demande peut-etre trop à Eclipse?

  7. #7
    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 Isher
    Merci pour vos réponses.
    J'étais effectivement arrivé au code que tu donnes après le post de Lunatix. La lecture du didacticiel sur les nouveautés ainsi que quelques liens glanés sur google m'ont fait un peu mieux decouvrir les Generic qui ressemble aux Templates du C++, je dirai en plus simple.
    En plus simple je ne sais pas... par contre ils ont l'avantage d'utiliser le même code pour toutes les instances (avec les Generics une nouvelle classe est créé pour chaque noiuveau type paramétré)...

    Citation Envoyé par Isher
    Je vais continuer à coder en version 1.5, je n'ai pas encore rencontré de soucis de compatibilité.
    Le problème se pose plus pour tes clients... Si tu peux controler la JVM de tes clients ou que cela ne dérange pas qu'il passe à la JVM 5.0 il n'y a pas de soucis...

    Citation Envoyé par Isher
    Sinon, le problème n'est pas totalement clos. Eclipse propose d'assigner le résultat de la méthode put pout lever le warning. En quoi cela léve-t-il l'incertitude sur le type? A moins que j'en demande peut-etre trop à Eclipse?
    J'ai déjà vu des incohérences d'eclipse au niveaux des warnings sur les Generics (il faut dire que les Generics ont ajouter un grand nombre de warning plus ou moins clair).
    Tu as bien spécifier le type paramétré <String,Color> à la fois sur la déclaration du type ET sur le constructeur comme dans mon exemple ?

    a++

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    (avec les Generics une nouvelle classe est créé pour chaque noiuveau type paramétré)...
    Avec les template C++ tu veux dire plutot, non ?

    http://java.sun.com/j2se/1.5.0/docs/.../generics.html
    If you are familiar with C++'s template mechanism, you might think that generics are similar, but the similarity is superficial. Generics do not generate a new class for each specialization, nor do they permit “template metaprogramming.”
    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

  9. #9
    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 bouye
    Avec les template C++ tu veux dire plutot, non ?
    Oui je voulais dire les Template C++ je me suis trompé

    Merci de m'avoir corriger

  10. #10
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    Eclipse te dis de recupérer la valeur de retour de ton put, car cette valeur te permets de savoir si ton appel c'est bien passer ou pas.

  11. #11
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Dans les proprietes de ton projet tu peux modifier les warnings pour desactiver ceux qui t'ennuient. Par exemple j'empeche Eclipse de me casser les @#! avec un warning pour chaque classe serialisable sans UID.

  12. #12
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    Et c'est une bonne idée de désactiver les warning sur les générics (si tu sais ce que tu programmes bien sur) parce que sinon tu risques d'en bouffer pas mal si tu as le malheur d'utiliser une API compatible avec une ancienne version de Java utilisant des collections et/ou si tu utilises un générateur de code Java (ex: le compilateur IDL->Java de Sun (même celui fournis avec Java 5.0)).

    J'ai eût le malheur de réactiver ces warnings dans mes projet JBuilder juste pour voir ce que ca donnait et outre les utilisations dans des libs externes de support de format de fichier de stockage scientifique (NetCDF) la grosse majorité des très très nombreux warnings vient des ... stubs et skels générés par idlj.......
    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

  13. #13
    Isher
    Invité(e)
    Par défaut
    En fait j'aurais du être plus precis avec ma question. Depuis l'utilisation explicite des Generics, je n'ai plus de Warning dans Eclipse.
    Je reformule donc:

    pourquoi eclipse demande de recuperer la valeur de retour alors que l'ambiguïté est levée avec les Generics?

    Mais je pense que vos derniers posts ont répondu à la question.

    Encore merci à tous.

  14. #14
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    L'utilisation des generics sert juste a eviter de faire un cast. Mais il faut bien que tu recuperes la valeur quelque part ^^

  15. #15
    Isher
    Invité(e)
    Par défaut
    la methode HashMap.put() retourne la valeur précedente pour la clé donnée ou null si c'est une création.

    Je l'utilise pour ajouter des paires (clé,valeur) et donc elle retourne toujours null dans mon cas. Eclipse annonce un Warning sur cette ligne ce qui m'a poussé à en savoir plus, d'ou ce "thread" sur les Generics que je n'utilisais pas.

  16. #16
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Si tu utilises les generics ou que tu as desactive le warning, c'est que tu as mis un autre warning pour les valeurs retournees et non lues.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Eclipse n'utilise pas les paramètres dans eclipse.ini
    Par Sfaxiano dans le forum Eclipse
    Réponses: 4
    Dernier message: 20/03/2010, 08h50
  2. Methode retournant une list utilisant les generics
    Par Mohicane dans le forum Langage
    Réponses: 2
    Dernier message: 28/09/2009, 11h35
  3. Réponses: 9
    Dernier message: 09/12/2008, 00h07

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