1

Je souhaite créer un utilitaire de ligne de commande qui effectue certaines opérations en fonction de la réflexion des fichiers de classe externes. Je passerais dans un chemin d'accès aux fichiers .class ou fichiers source (éventuellement des caractères génériques). À un certain moment pendant l'exécution, je dois obtenir des objets de classe pour chaque classe, ne connaissant pas leurs noms de paquets à l'avance. Que faudrait-il faire pour cela? Que puis-je regarder pour commencer? J'ai également accès aux fichiers sources des classes.Comment charger un fichier .class java arbitraire à partir du système de fichiers et y réfléchir?

est en java 1.6.

également, serait-il plus facile d'obtenir des objets de classe de la source en utilisant l'API du compilateur java?

Répondre

3

Vous devez créer un ClassLoader et utiliser defineClass pour créer un Class du fichier que vous avez lu. Add dynamic Java code to your application est un intéressant à lire sur de telles choses, il décrit même la compilation des sources.

+0

par 'créer' voulez-vous dire instantiate ou subclass? – gtrak

+0

'defineClass' chargera le fichier de classe dans la JVM et retournera une' Class' qui le représente. Vous pouvez ensuite créer une instance de la classe à l'aide de l'API de réflexion. – ewernli

+0

Si vous avez besoin d'utiliser un chargeur de classe existant, vous pouvez utiliser reflexion pour appeler defineClass() sur n'importe quel chargeur de classe que vous choisissez. –

1

Si vous ne connaissez pas le nom du package, vous pouvez le trouver en lisant le fichier avec une bibliothèque appropriée, telle que ASM d'ObjectWeb. En fait, si vous essayez simplement de trouver des informations sur le fichier de classe, vous ne voudrez peut-être pas du tout utiliser la réflexion.

Questions connexes