Question

Nous avons une assez grande quantité de code qui vient de passer à Java 5. Nous utilisons des génériques dans les composants destinés à être publiés dans la version Java 5, mais le code restant est, bien sûr, plein de types bruts. J'ai configuré le compilateur pour générer une erreur pour les types bruts et commencé à les effacer manuellement, mais au rythme actuel, il faudra beaucoup de temps très longtemps pour les traiter (il y a environ 2500 erreurs). Et c’est avec le correctif rapide utile Infer Generic Type d’Eclipse, qui élimine toujours les erreurs, mais génère souvent du code qui nécessite davantage de travail.

Existe-t-il une meilleure façon de gérer cela? Existe-t-il des outils automatisés meilleurs qu'Eclipse? Est-il possible d'appliquer le refactoring à toutes toutes les occurrences au lieu de les exécuter une par une? Ou ignorez-vous simplement les avertissements?

Était-ce utile?

La solution

Je suggérerais d'ignorer les avertissements. Sinon, vous passerez beaucoup de temps à mettre à jour le code hérité sans apporter aucune amélioration à ses fonctionnalités.

Mise à jour: Excellent commentaire de Luke qui, selon moi, devrait bénéficier d'une plus grande visibilité: "Les génériques constituent un moyen d'attraper les bogues d'exécution lors de la compilation. Sauf si ce code hérité contient des bogues que vous pensez liés au casting, je le laisserais seul (s'il n'est pas cassé, ne le corrigez pas) "

Autres conseils

Autant que je sache, vous vous y prenez aussi efficacement que possible. Ses évidemment pas parfait, mais vous finirez par finir.

Je vous recommande toutefois de procéder par étapes. il y a des parties probables du code qui en bénéficierait plus que d'autres, concentrez-vous sur ceux-ci. Essayer tout faire en un seul passage présente le risque d'introduire de nouveaux bogues dans votre code. nous avoir un tel endroit où nous avons une collection qui tient dépendant du contexte les données et les médicaments génériques ne peuvent en réalité pas fonctionner.

En gros, faites ce que vous faites, mais faites-le par étapes dans le cadre d'un autre travail, au lieu d'essayer de résoudre le problème en un seul coup.

Face à un défi similaire, nous avons opté pour une mise à niveau vers des génériques de style Java 5 uniquement dans le code modifié pour une autre raison. Donc, si vous avez un bogue à corriger dans DoItFast.java, mettez à jour DoItFast.java pour qu'il utilise les génériques de style Java 5. Les zones du code qui sont éditées et modifiées régulièrement seront mises à jour rapidement. Après quelques semaines ou mois, vous pouvez réévaluer l’état de votre base de code.

Si cela ne vous permet pas de faire le travail assez vite, parfois, je profite du temps qui passe après le déjeuner pour nettoyer sans réfléchir quelques classes et accélérer le processus.

Je ne pense pas qu'il soit nécessaire de mettre à jour tout l'ancien code. Peut-être que si vous pouviez en quelque sorte identifier les parties de l'ancien code fréquemment utilisées et les mettre à jour pour qu'elles utilisent des types génériques? Ou peut-être ne pouvez-vous vous inquiéter que lorsque le type brut est renvoyé d'une fonction publique? Un grand nombre de ces cas ne sont probablement que des variables privées / locales, qui sont déjà écrites sans types génériques et fonctionnent probablement très bien. Il ne vaut donc probablement pas la peine de les réécrire.

Je comprends avec IDEA, vous pouvez sélectionner toutes vos classes, afficher le menu contextuel et sélectionner Refactor | Générer. Travail accompli. Travailler avec du code générifié (IMO) est certainement une expérience plus agréable.

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