À l'heure actuelle, j'ai qui imprime la plupart des informations de manière réfléchi, mais crée un corps vide. Comment puis-je ajouter à la nature réfléchissante de Java pour imprimer le corps de la méthode? P> P>
3 Réponses :
Java n'a pas cette information au moment de l'exécution. La seule chose que vous pouviez imprimer serait bytecode. P>
Le seul moyen de faire quelque chose comme ça est d'écrire / utiliser un décompiler. Cela implique de lire directement le code d'octet, ce qui n'est pas une fonction standard de la réflectionPI. Le code source tel que représenté dans le fichier source d'origine est parti, et il peut ne pas être possible de le reproduire complètement, car il s'agissait d'un code octet. (Par exemple, les génériques seraient perdus, ainsi que l'utilisation d'une boucle améliorée pour la boucle ne se distingueraient pas et je suis sûr qu'il y en a d'autres). P>
Comment puis-je ajouter à la nature réfléchissante de Java pour imprimer le corps de la méthode? P> blockQuote>
Avec une difficulté considérable, j'ai peur. p>
Pour un démarrage, le code source d'origine est le plus susceptible d'être indisponible dans un programme en cours d'exécution. En règle générale, les développeurs n'incluent pas le code source dans les pots binaires. (Et même s'ils le font, il n'ya pas de garantie qu'ils seront les "vraies" sources.) P>
Vous pouvez généralement obtenir les bytecodes pour la classe en traduisant la FQN pour la classe dans le fichier ByTecode et en utilisant le chargeur de classes de classe pour charger le fichier en tant que flux de ressources. Mais il n'est pas garanti que les bytecodes que vous obtenez de cette façon sera la même que ce qui a été chargé. (Certains chargeurs de classes dégagent avec les bytecodes pour diverses raisons.) P>
En supposant que vous pouvez em> obtenir le véritable bytecodes, la dernière étape consistera à les afficher, ou à les désassembler ou à les décompiler à quelque chose de plus lisible. Vous devriez être capable d'utiliser
Javap code> pour faire un démontage, mais la décompilation impliquerait à l'aide d'un produit tiers. Bien entendu, le code décompilé sera très différent du code d'origine et si les bytecodes ont été obscurcissées, le code source sera plutôt illisible. P>