Question

J'aime beaucoup les génériques et les utilise partout où je peux. De temps en temps, je dois utiliser l'une de mes classes dans un autre projet qui doit fonctionner sur une ancienne machine virtuelle Java (antérieure à la version 5.0), sur JavaME (où les génériques ne sont pas autorisés non plus) ou dans Microsoft J # (qui a TRES Prise en charge des génériques).

Pour le moment, je supprime tous les génériques manuellement, ce qui signifie également d'insérer de nombreux modèles.

Étant donné que les génériques sont censés n'être que pour la compilation et que chaque élément de code générique peut éventuellement être converti automatiquement en code non générique, je me demande s'il existe un outil qui peut le faire pour moi.

S'il n'y a pas un tel outil, comment pourrais-je résoudre le problème autrement? Devrais-je arrêter complètement d'utiliser des génériques?

Il existe déjà des réponses relatives à la compatibilité de bytecode . Que se passe-t-il si j'ai besoin de compability du code source pour une raison quelconque?

Était-ce utile?

La solution

Vous devez utiliser un élément tel que Retroweaver pour pouvoir réaliser ce type de travail. Les autres réponses à cette question sont légèrement trompeuses. Les génériques sont en quelque sorte des bytecodes compatibles avec les versions précédentes, mais pas entièrement (voir java.lang.reflect.Type si vous ne me croyez pas). En outre, il existe un problème d'attribut bytecode version, qui empêchera une classe compilée avec 1.5 de s'exécuter sur une version précédente. Retroweaver résout ces deux problèmes tout en activant d'autres fonctionnalités de Java 5, telles que les annotations et les énumérations.

Autres conseils

Dans Netbeans (je ne suis pas sûr de l'EDI que vous utilisez), vous pouvez définir la compatibilité du code source sur une version Java définie. Réglez simplement celle-ci sur une version prenant en charge les génériques. Comme nous l’avons déjà signalé, les génériques sont compatibles avec les anciennes versions de JVM / JRE en code-octet et devraient donc fonctionner immédiatement.

Au meilleur de ma connaissance, Java 5 n’est pas un code octet compatible avec Java 1.4. Autrement dit, vous ne pouvez pas utiliser les classes compilées Java 5 avec une machine virtuelle antérieure.

Vous pouvez vérifier retroweaver. Cela a souvent été mentionné lors de l’introduction des génériques. Personnellement, je n'en ai aucune expérience.

Avez-vous demandé à Google? Ma recherche a été http://www.publicobject.com/glazedlists/documentation/ Generics_and_Java_1.4_with_one_codebase.pdf , ce qui semble une approche très intéressante.

Compatible avec le bytecode, il devrait fonctionner immédiatement avec un vieil interprète.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top