J'essaie de créer une classe qui implémente une interface de la bibliothèque Java. ResultSet pour être spécifique, bien que l'interface particulière ne devrait pas être pertinente à la question. (J'ai besoin de mettre une couche au-dessus d'un ResultSet régulier qui fournit des fonctionnalités supplémentaires, mais je voudrais que les fonctions "régulières" passent, et j'ai quelques fonctions qui devraient être capables de prendre soit un ResultSet régulier ou mon "ResultSet" "amélioré".)implémentation de l'interface sur plusieurs versions
Mon problème est le suivant: y a-t-il un moyen de faire cela pour que la classe puisse compiler avec succès dans Java 5 et Java 6?
Plusieurs fonctions sont déclarées dans l'interface ResultSet dans Java 6 qui renvoient des objets non définis dans Java 5. Si j'inclue ces fonctions, ma classe ne compilera pas dans Java 5 car je référence des types non définis. Mais si je n'inclue pas ces fonctions, alors ma classe ne compilera pas en Java 6 car je n'implémente pas complètement l'interface. Je semble être coincé dans quelque chose d'un catch-22. Je n'ai besoin d'aucune de ces fonctions - en fait, ma mise en œuvre ne fait que lancer une exception «non implémentée» pour chacune d'entre elles. Certains de nos programmeurs exécutent Java 5 et d'autres exécutent Java 6. Notre environnement de production est Java 5. Je suppose que dans un monde plus parfait, nous utiliserions tous la même version. Mais même si je peux modifier notre environnement pour rendre le problème théorique dans ce cas, ce problème se pose sûrement avec des projets open source. Et si je modifie mon code pour qu'il fonctionne avec Java 5, alors quand, tôt ou tard, nous passerons à Java 6, la classe se cassera, ce qui semble assez ennuyeux.
Mise à jour
Eh bien, merci pour les réponses. J'espérais plutôt que quelqu'un me dise: "Oh, si vous ajoutez juste cette annotation ou tapez la lettre" W "ici, tout fonctionnera comme par magie." Pas de chance, je suppose. Toutes les réponses reçues (à partir de cette mise à jour, de toute façon) font de bons points, donc je les ai tous mis à jour et j'ai donné le prix "meilleure réponse" à celui qui exprime le mieux ma frustration. :-)
Je pense que ma vraie solution va être d'abandonner l'idée d'implémenter ResultSet et de créer une nouvelle interface qui inclut seulement les fonctions de ResultSet qui doivent être implémentées pour que la bête fonctionne. Je trouve cela émotionnellement insatisfaisant mais, semble-t-il, meilleur que les alternatives.
Cela détruira la sécurité de type statique et impliquera l'écriture d'une masse de plaquette. Ce serait sujet aux erreurs et inefficace. Mais ça marcherait certainement! –
@ Tom Anderson * Cela détruira la sécurité de type statique * Je sais et c'est ce que je n'aime pas non plus. Mais tout ce qui a de la sécurité dans le temps de compilation nécessiterait l'utilisation de CGLIB et al –