Je suis un fan de métaprogrammation statique en C ++ . Je sais que Java a maintenant des génériques. Est-ce que cela signifie que la métaprogrammation statique (c'est-à-dire l'exécution du programme à la compilation) est possible en Java? Si tel est le cas, quelqu'un peut-il recommander de bonnes ressources pour en savoir plus?
Réponses
Trop de publicités?Jetez un coup d'oeil à Clojure . C'est un LISP avec Macros (méta-programmation) qui s'exécute sur la JVM et qui est très interopérable avec Java.
Que voulez-vous dire exactement par "statique métaprogrammation"? Oui, C++ modèle de la métaprogrammation est impossible en Java, mais il offre d'autres méthodes, beaucoup plus puissants que ceux de C++:
- la réflexion
- programmation orientée aspects (@AspectJ)
- manipulation de bytecode (Javassist, ObjectWeb ASM, Java agents)
- la génération de code (Annotation Processing Tool, moteurs de template comme la Vitesse)
- Arbre de Syntaxe abstraite manipulations (Api fournies par populaire IDEs)
- possibilité d'exécuter Java compiler et d'utiliser le code compilé, même au moment de l'exécution
Il n'y a pas de meilleure méthode: chacune de ces méthodes a ses forces et ses faiblesses. En raison de la flexibilité de la JVM, l'ensemble de ces méthodes en Java peut être utilisé à la fois au moment de la compilation et de l'exécution.
Encore plus, les compilateurs effacent la limite supérieure des types génériques. Vous ne pouvez donc pas créer une nouvelle instance d'un type générique T au moment de l'exécution.
La meilleure façon de faire du métaprogamme en Java est de contourner l’effacement de type et de rendre l’objet Class<T>
de votre type T. Néanmoins, il ne s’agit là que d’un hack.