45 votes

Quelqu'un a-t-il déjà transféré les Expressions Lambda vers Java 7 ?

Lire sur le type de bytecode que Java 8 produit à partir des lambdas J'ai pensé à l'époque de la sortie de Java 5. A cette époque, il y avait Retroweaver et autres outils pour convertir le bytecode compilé avec le JDK 5 pour qu'il fonctionne avec le JRE 1.4.

Quelqu'un a-t-il déjà créé un tel outil de backporting pour les lambdas de Java 8 ? Les développeurs Java pourraient ainsi commencer à utiliser les lambdas dès aujourd'hui sur des JRE Java 7 de qualité production, sans avoir à attendre 6 à 12 mois la version GA de Java 8.

Voici mon analyse des raisons pour lesquelles un tel backporter devrait être implémentable relativement facilement :

Les lambdas de Java 8 ne semblent pas utiliser de fonctionnalités de la JVM que Java 7 n'aurait pas (par ex. invokedynamic ), et le java.lang.invoke.LambdaMetafactory et ses dépendances ressemblent à du pur Java, il devrait donc être possible de les implémenter dans une bibliothèque tierce. Ainsi, le bytecode compilé avec le JDK 8 pourrait être exécuté sur le JRE 7 en ajoutant une bibliothèque tierce avec une copie de LambdaMetafactory (sous un paquet différent) et en transformant le bytecode pour utiliser cette métafactory à la place. On pourrait également générer des classes et des méthodes synthétiques pour contourner les contrôles d'accessibilité, comme par exemple java.lang.invoke.MagicLambdaImpl semble impliquer. Ou alors, générez des classes internes anonymes pour tous les lambdas, comme l'ont fait certains des premiers JDK Early Access dotés de lambdas.

44voto

Esko Luontola Points 53877

Il y a maintenant Retrolambda pour convertir le bytecode de Java 8, qui utilise des expressions lambda et des références de méthodes, pour fonctionner sur Java 7, 6 ou 5. (Java 1.4 a donné des erreurs de vérification ; je n'ai pas cherché plus loin).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X