Forum Programmation.java Generic en Java 5.0 et Eclipse

Posté par .
Tags : aucun
0
20
juil.
2005
Bonjour,
j'utilise Eclipse 3.0.2 et Java 5.0
Dernièrement, après avoir compilé mon code directement avec javac, je m'aperçois d'un message (warning, unchecked ...), qui m'amènes à utiliser les constructionc générique pour les listes et collections.
Mon problème : Eclipse, bien qu'utilisant la version 5.0 de Java, ne reconnait pas la syntaxe private ArrayList comme valide.
Y-a-t-il une option à régler, un plugin à télécharger ?

D'autre part, j'aimerais savoir ce que vous pensez de cette nouveauté. Est-elle intéressante, a-t-elle des inconvénient ?
  • # Boulet

    Posté par . Évalué à 1.

    j'ai tenté de vérifier mon message avant de l'envoyer, mais bien sur des choses m'ont échappées. Entre autre, il faut lire bien sur :
    private ArrayList< MyObj >
    • [^] # Re: Boulet

      Posté par . Évalué à 3.

      As-tu bien modifié le niveau de compatibilité de ton compilateur Eclipse?
      Dans le menu Window/Preferences/Java/Compiler , je crois me souvenir qu'il faut placer le "Compiler compliance level" à 5.0 , par défaut il reste sur 1.4 et comme la jvm 1.4 ne reconnaît pas ces fonctionnalités il grogne..
      • [^] # Presque bon

        Posté par . Évalué à 1.

        Effectivement, j'étais passé à côté de l'option, qui malheureusement chez moi ne me propose que "1.3" et "1.4" :-(
        • [^] # Re: Presque bon

          Posté par (page perso) . Évalué à 2.

          t'as plus qu'as installer eclipse 3.1 qui propose 5.0.
          Un conseil aussi lorsque que tu as une erreur que tu ne connais pas, ou que tu ne sais pas résoudre, tu fait clic droit sur cette erreur et "quick fix" (eclipse 3.1 n'ai pas encore en français) et ça te propose des solutions genre "passer Compiler compliance level à 5.0" (pour eclipse 3.1, mais 3.0 j'ai pas essayé mais apparemment ça le propose pas).
          • [^] # Re: Presque bon

            Posté par . Évalué à 1.


            t'as plus qu'as installer eclipse 3.1 qui propose 5.0

            Oui, je suis en train de le télécharger déjà :)
            Et pour le clic droit, quick fix, j'avais regarde, la solution n'étais pas disponible avec ma version.
            Merci de votre aide à tous les deux.

            Des avis sur l'utilisation de cette syntaxe ?
        • [^] # Re: Tu tiens le bon bout

          Posté par . Évalué à 2.

          Ce n'est vraisemblablement pas la bonne jvm qui est définie dans le compilateur eclipse.. Pour t'assurer que c'est bien la 1.5 qu'il utilise tu vas dans Window/Preferences/Java/Installed JREs et tu vérifies que c'est bien la 1.5 qui est définie et sélectionnée. Si tu as fait ton install de 1.5 après il est probable qu'il ait gardé la 1.4. Une fois la bonne JVM sélectionnée, l'option 5.0 devrait apparaître
          • [^] # Re: Tu tiens le bon bout

            Posté par . Évalué à 1.

            ah oui effectivement, plutot à cause de la version d'Eclipse... aux temps pour moi les vrais eclipseurs veillent au grain ;)
          • [^] # Re: Tu tiens le bon bout

            Posté par . Évalué à 1.

            J'ai vérifier, et j'utilise bien pour Eclipse la jvm 1.5.
            Ce n'est pas trop grave, si avec la version 3.1 je corrige mon problème. Heureusement que je peux installer une nouvelle version :)
            Merci encore.
  • # Génériques

    Posté par . Évalué à 5.

    Puisque l'on t'a déjà répondu sur le warning (bien qu'en fait ton problème était que tu écrivais du 1.4 mais en compilant avec le 1.5 qui utilise par défaut la version 5.0 du language, il suffisait donc de choisir "1.4" comme niveau de compatibilité : javac 1.5 aurait arrêté de se plaindre et tu n'aurais pas eu à changer ta syntaxe pour virer les warnings), je te réponds sur l'utilisation des génériques.

    L'utilisation des génériques permet au compilateur (et donc à toi-même) de faire plus de tests. Par exemple dans une List< Toto >, tu ne peux mettre que des Toto (avec une List, on pouvait mettre n'importe quoi). Ensuite, tu n'as plus à transtyper les objets que tu sors de ta liste puisque tu sais (et le compilateur aussi) que ce sont des Toto.

    Exemple, avant :
    List lst = new ArrayList();
    lst.add(new Toto());
    Toto t = (Toto)lst.elementAt(0);
    lst.add(new String()); // c'est permis
    Toto u = (Toto)lst.elementAt(1); // personne ne se plaint, sauf à l'exécution

    après :
    List< Toto > lst = new ArrayList< Toto >();
    lst.add(new Toto());
    Toto t = lst.elementAt(0);
    lst.add(new String()); // ne compile pas !

    Tu as aussi d'autres constructions intéressantes en 1.5, notamment le nouveau for :

    Avant :
    for (Iterator i = lst.iterator(); i.hasNext(); ) {
    Toto t = (Toto)i.next();
    ...
    }

    maintenant :
    for (Toto t : lst) {
    ...
    }

    et d'autres ajouts (annotations, api multi-thread augmentée, etc.).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.